首页 > 解决方案 > 如何在 Django 查询中使用列表来添加字段

问题描述

我喜欢执行如下所示的 Django 查询:

query = Dbmodel.objects.all().annotate(result=F('fieldname1') + F('fieldname2') + F('fieldname4'))

但是,我不想直接使用字段名,而是使用带有字段名的列表:

fields = ['fieldname1', 'fieldname2', 'fieldname4']

根据用户交互,列表中字段名的数量可能会有所不同。有没有办法做到这一点?

由于这是我在 StackOverflow 上的第一个问题,如果我的问题不清楚或者我可以改进我的问题,请告诉我。

标签: djangodjango-models

解决方案


您可以通过使用operator.add将多个F表达式组合成一个表达式,并将其传递到注释中来做到这一点。

它看起来像这样:

import operator
from django.db.models import F

# any amount of fields
fields = ["fieldname1", "fieldname2", "fieldname3"] 

# combine into a single sum
combined_expression = reduce(operator.add, (F(x) for x in fields))

# the new query
query = Dbmodel.objects.all().annotate(result=combined_expression)

推荐阅读