Django模型和Python属性

fut*_*ime 10 python django django-models

我试图用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 = ''
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,在控制台中我可以与摘要属性进行交互.但是当我尝试用它做任何事情时,就像Post(title="foo", summary="bar")它一样,它会引发一种契合.有没有办法让Django与Python属性玩得很好?

kon*_*iik 12

不幸的是,Django模型在Python属性方面表现不佳.它的工作方式,ORM只识别QuerySet过滤器中的字段实例的名称.

您将无法summary在过滤器中引用,而是必须使用_summary.这很快就会变得混乱,例如在多表查询中引用这个字段,你必须使用类似的东西

User.objects.filter(post___summary__contains="some string")
Run Code Online (Sandbox Code Playgroud)

有关属性支持的更多详细信息,请参阅https://code.djangoproject.com/ticket/3148.