【发布时间】:2018-10-28 08:10:10
【问题描述】:
我有一个包含 @property 的模型,我希望在执行以下操作时包含该模型
vals = MyModel.objects.values()
Another S/O post 建议这样做的方法是重写管理器类的 get_queryset 方法,并通过调用 annotate(xtra_field=...) 来增强。
问题是我找不到如何使用模型属性执行此操作的示例。我尝试过类似的东西
super(SuperClass, self).get_queryset().annotate(xtra_fld=self.model.xtra_prop)
及其众多变体,但都不起作用。
问题,我认为注释参数的 RHS 应该是什么?
(而且,是的,我知道还有其他更笨重的方法可以做到这一点,比如迭代 values() 返回的内容并在我去的时候添加属性。对我来说,这不是一个非常优雅(甚至是 django)的解决方案.
【问题讨论】:
-
@property不能这样做,因为属性处于 Python 级别。数据库对属性一无所知。 -
是的,现在我想起来了。在进一步的研究中,我认为解决方案将是创建一个可以构造/解构实际 db 字段的自定义字段。我所做的与文档中的
Hand示例没有什么不同。
标签: django properties model django-queryset annotate