django - 如何在 Django 查询中使用列表来添加字段
问题描述
我喜欢执行如下所示的 Django 查询:
query = Dbmodel.objects.all().annotate(result=F('fieldname1') + F('fieldname2') + F('fieldname4'))
但是,我不想直接使用字段名,而是使用带有字段名的列表:
fields = ['fieldname1', 'fieldname2', 'fieldname4']
根据用户交互,列表中字段名的数量可能会有所不同。有没有办法做到这一点?
由于这是我在 StackOverflow 上的第一个问题,如果我的问题不清楚或者我可以改进我的问题,请告诉我。
解决方案
您可以通过使用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)
推荐阅读
- python - Python 在函数中使用类并附加到列表
- python - 离线“conda install”库和依赖项的方法
- pip - 我在 python/python39/scripts 文件夹中看到 pip 但它仍然显示“找不到 pip 命令”
- android - 如何共享位于下载目录中的文件?
- javascript - 如何前置
- java - 从另一个小时减去一个小时
- html - 如何使用引导程序在导航栏下方添加元素?
- python - 如何删除 pandas ta 列下的多行?
- entity-framework - EF Core:分组方式 => InvalidOperationException
- javascript - 如何使用 Vue CLI 提取多个供应商文件中的特定依赖项