结合相同模型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个对象的主要内容,如果未能解决你的问题,请参考以下文章
Graphene-Django:在模式中结合查询对象(只接受第一个参数)