12

次のように、Pythonプロパティを使用してDjangoモデルを設定しようとしました。

class Post(models.Model):
    _summary = models.TextField(blank=True)
    body = models.TextField()

    @property
    def summary(self):
        if self._summary:
            return self._summary
        else:
            return self.body

    @summary.setter
    def summary(self, value):
        self._summary = value

    @summary.deleter
    def summary(self):
        self._summary = ''

これまでのところ順調で、コンソールではsummaryプロパティをうまく操作できます。しかし、これを使ってDjango-yを実行しようとすると、たとえばPost(title="foo", summary="bar")、それはうまくいきます。DjangoをPythonプロパティでうまく機能させる方法はありますか?

4

1 に答える 1

14

残念ながら、DjangoモデルはPythonプロパティとうまく連携しません。それが機能する方法では、ORMはQuerySetフィルターのフィールドインスタンスの名前のみを認識します。

summaryフィルタで参照することはできません。代わりに、を使用する必要があります_summary。これは非常に簡単になります。たとえば、マルチテーブルクエリでこのフィールドを参照するには、次のようなものを使用する必要があります。

User.objects.filter(post___summary__contains="some string")

プロパティサポートの詳細については、https://code.djangoproject.com/ticket/3148を参照してください。

于 2012-06-14T01:00:16.357 に答える