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 = ''

到目前为止一切顺利,在控制台中我可以很好地与摘要属性交互。但是当我尝试用这个来做任何 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 回答