python - django:带有查询集值的选择显示
问题描述
我想在模板上使用 get_status_display,来自一个只有模型中一些字段的查询集。
我有一个带有选择字段(状态)的模型。
class Operation(models.Model, ModelMixin):
operation_area = models.ForeignKey('operations.OperationArea', null=True)
created = models.DateTimeField(auto_now=True)
indication = models.NullBooleanField()
observation = models.TextField(blank=True, null=True)
rate = models.IntegerField(blank=True, null=True)
scheduling = models.DateTimeField(blank=True, null=True)
status = models.IntegerField(choices=OPERATION_TYPE)
class OperationArea(models.Model, ModelMixin):
campaign = models.ForeignKey('campaigns.Campaign')
person = models.ForeignKey('registrations.Person')
user = models.ForeignKey('authentication.User')
area = models.CharField(max_length=1, choices=OPERATION_AREA)
我的查询是:
Operation.objects.filter(operation_area__user=user).values('id', 'created', 'operation_area__person__name', 'status')
从这里得到一个字典,但 get_FOO_dislpay 是一个实例方法,不适用于字典。我不想使用 .only() 因为他带来了operation_area对象并获取person.name他进行了另一个查询,例如operation.operation_area.person.name。任何想法如何处理一个查询和 get_FOO_display?
解决方案
我认为annotate()是你要找的。
使用提供的查询表达式列表注释 QuerySet 中的每个对象。表达式可以是一个简单的值、对模型(或任何相关模型)上字段的引用,或者是对与模型中的对象相关的对象进行计算的聚合表达式(平均值、总和等)。查询集。
annotate() 的每个参数都是一个注释,将添加到返回的 QuerySet 中的每个对象。
Django 提供的聚合函数在下面的聚合函数中描述。
使用关键字参数指定的注释将使用关键字作为注释的别名。匿名参数将根据聚合函数的名称和正在聚合的模型字段为它们生成一个别名。只有引用单个字段的聚合表达式可以是匿名参数。其他一切都必须是关键字参数。
你应该使用:
operations.annotate(person_name=F('operation_area__person__name'))
看看https://docs.djangoproject.com/en/2.0/ref/models/querysets/#annotate。
推荐阅读
- c# - 通过以编程方式清除焦点的 WPF 更新绑定
- python - 如何更新 pip 包
- amazon-redshift - 运行查询以查找计数差异时出错
- css - Scss 使用循环创建动态混合
- kernel - 从 rocko 更新到 thud 后 .dtb 文件丢失
- r - 在 ggplot/stan 的跟踪图面板中更改单个图的标题
- sql - 检索员工的主要和次要功能
- javascript - 为什么 req.query.name 返回未定义?
- android - 我想在 android kotlin 的 recyclerView 内创建一个微调器,当进入 ArrayAdapter 时,错误显示
- javascript - 无法在 beforeCreate 挂钩中设置日期 - Strapi (beta14)