【发布时间】:2019-04-07 11:26:34
【问题描述】:
所以我已经阅读了注释列,并使用了 F() 函数,并且我看到了 this post 关于如何对多列求和的信息。但是,我正在使用 EAV 风格的数据库,所以我得到了一个可变的列列表。考虑这个例子:
class TestModel(models.Model):
column_a = models.FloatField()
column_b = models.FloatField()
column_c = models.FloatField()
column_d = models.FloatField()
尝试 1:
columns = {'column_a', 'column_c', 'column_d'}
queryset = DummyModel.objects.annotate(total=Sum([F(column_name) for column_name in columns]))
但是,print(queryset.query) 会产生错误 django.core.exceptions.FieldError: Cannot resolve expression type, unknown output_field
尝试 2:
queryset = DummyModel.objects.annotate(total=ExpressionWrapper(Sum([F(column_name) for column_name in columns]), output_field=FloatField()))
这不会产生编译错误,但 SQL 查询会产生:
SELECT "test_model"."column_a", "test_model"."column_c", "test_model"."column_d", SUM([]) AS "total" FROM "test_model"
这是空的。有谁知道如何解决这个问题?非常感谢任何帮助!
【问题讨论】:
标签: python django django-annotate