gpt4 book ai didi

django - 如何使用基于类的 View 按 Django 中相关字段的总和进行排序?

转载 作者:行者123 更新时间:2023-12-02 05:48:25 24 4
gpt4 key购买 nike

如果我有一个如下所示的代理模型:

class Agent(models.Model):
name = models.CharField(max_length=100)

以及一个如下所示的相关模型:

class Deal(models.Model):
agent = models.ForeignKey(Agent, on_delete=models.CASCADE)
price = models.IntegerField()

和一个看起来像这样的 View :

from django.views.generic import ListView

class AgentListView(ListView):
model = Agent

我知道我可以调整查询集中代理的排序顺序,我什至知道如何按代理的交易数量对代理进行排序,如下所示:

queryset = Agent.objects.all().annotate(uc_count=Count('deal')).order_by('-uc_count')

但是,我无法弄清楚如何按每个代理的交易价格总和对交易进行排序。

最佳答案

鉴于您已经知道如何进行注释并按这些注释进行排序,您已经完成了 90% 的工作。您只需使用 Sum 聚合并向后遵循关系即可。

Django docs give this example :

Author.objects.annotate(total_pages=Sum('book__pages'))

您应该能够执行类似的操作:

queryset = Agent.objects.all().annotate(deal_total=Sum('deal__price')).order_by('-deal_total')

我的敏锐感觉告诉我,您可能需要向 Sum 聚合添加 distinct=True,但未经测试我不确定。

关于django - 如何使用基于类的 View 按 Django 中相关字段的总和进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59848612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com