所以我已经阅读了注释列,并利用了 F() 函数,我看到了这篇关于如何对多列求和的帖子。但是,我正在使用 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]))
但是, aprint(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"
哪个是空的。有谁知道如何解决这个问题?任何帮助是极大的赞赏!