【问题标题】:Combine 2 object of same model Django结合相同模型Django的2个对象
【发布时间】: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}

谢谢

【问题讨论】:

    标签: django django-models django-queryset django-annotate


    【解决方案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自省模型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2012-11-25
    相关资源
    最近更新 更多