结合相同模型Django的2个对象

Posted

技术标签:

【中文标题】结合相同模型Django的2个对象【英文标题】:Combine 2 object of same model Django 【发布时间】:2018-10-07 17:43:28 【问题描述】:

有没有办法将同一模型的 2+ 个对象与所有字段的总值组合/合并为 1。

我的意思是类似于 Author.objects.annotate(Sum('book__pages')),但适用于模型中的所有字段。

1 个对象 - 'user':2, 'events':20, 'time': 233

2 个对象 - 'user':2, 'events':10, 'time': 400

需要总数 - 'user':2, 'events':30, 'time': 633

谢谢

【问题讨论】:

【参考方案1】:

您可以使用values(),然后使用annotate()

MyModel.objects.values('user').annotate(
    total_events=Sum('events'),
    total_time=Sum('time'),
)

请参阅Django docs 了解更多信息。

【讨论】:

这是计算总值的唯一方法吗?对我来说不是最好的,因为我手动输入模型中的每个值。 如果不想输入字段,可以自省模型创建字典kwargs='total_events': Sum('events'), ...,然后调用.annotate(**kwargs) 这样我就可以创建kwargs ='total_field_name': Sum('field_name'), ... +12 fields ,然后调用模型查询集.annotate(**kwargs) 是的,这就是我的建议。 如果你不想硬编码字段名,你可以使用Meta API自省模型。

以上是关于结合相同模型Django的2个对象的主要内容,如果未能解决你的问题,请参考以下文章

Django 结合 2 个查询集

Django 结合两个没有 Q 的查询

Django:在模型选择中将惰性翻译与标记安全相结合

Graphene-Django:在模式中结合查询对象(只接受第一个参数)

在 Django 1.5 中结合 CreateView 和 DetailView

结合来自不同 CNN 模型的概率