python - Django 模型和 Python 属性

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

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

相关文章:

python - Django 登录表单/无效用户

python - 在django中访问RelatedManager对象

python - 获取数据帧中每行中的前 n 个值及其出现的列名称

php - mobwrite 问题 - 守护进程不会启动

python - 当我运行 pip3 freeze 或 pip3 list 时没有输出

python - 对 `copy` 的 `numpy.astype` 属性感到困惑

python - 如何在 Python 中创建一个行为类似于 Django 抽象基类的类?

django - 为 Django 推送通知注册设备

python - 在 Django 中更新表单后出现 NoReverseMatch 错误

python - django app : Cannot assign "' '": "ImageText. 链接”必须是一个 "Link"实例