【发布时间】:2022-01-13 15:30:27
【问题描述】:
我正在对查询集使用值和注释进行一些计算。让我们考虑这个模型:
class Foo(models.Model):
fk_bar = models.ForeignKey(to=Bar, ....)
foo_val = models.IntegerField(...)
class Bar(models.Model):
attr = models.Charfield(...)
val = models.IntegerField(...)
所以我可以这样做:
Foo.object.all().values("fk_bar")
为了按外来关系分组(某些 Foo 可能指向同一个 Bar)。
那我就可以了
Foo.object.all().values("fk_bar").annotate(qte=Sum("foo_val"))
对于具有相同 fk_bar 的所有对象的 foo_val 的总和,产生类似的结果:
{"fk_bar":<int>, "qte": <int>}
但是我希望生成的字典也包含 Bar.attr,例如类似:
Foo.object.all().values("fk_bar").annotate(qte=Sum("foo_val")).annotate(bar_attr="fk_bar__attr")
得到类似的东西:
{"fk_bar":<int>, "qte": <int>, "bar_attr":<str>}
但是失败了(TypeError: Queryset.annotate() 收到了一个非表达式)。有什么办法可以解决这个问题?
【问题讨论】:
标签: django annotations django-queryset