我尝试使用 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 属性配合得很好?
最佳答案
不幸的是,Django 模型不能很好地处理 Python 属性。它的工作方式是,ORM 仅识别 QuerySet 过滤器中字段实例的名称。
您将无法在过滤器中引用summary
,而是必须使用_summary
。这很快就会变得困惑,例如要在多表查询中引用该字段,您必须使用类似
User.objects.filter(post___summary__contains="some string")
参见 https://code.djangoproject.com/ticket/3148有关属性(property)支持的更多详细信息。
关于python - Django 模型和 Python 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11014138/