【问题标题】:Most effective way to get number of items with similar value in a Django Query在 Django 查询中获取具有相似值的项目数量的最有效方法
【发布时间】:2011-12-02 18:09:40
【问题描述】:

我正在寻找计算以下内容的最快方法:

给定一个这样的联系人模型:

class Contact(basemodel):

    item = models.ForeignKey(Item)
    recipient = models.ForeignKey(User, )
    sender = models.ForeignKey(User, )

我正在寻找最快的查询来获取特定项目的发件人列表以及他们在这种情况下拥有的联系人对象的数量。

我会得到这样的发件人列表 senders = Contact.objects.filter(item=self.item).values_list('sender', flat=True)

但我需要计算每个发件人在列表中的次数。

我确信有一种更清洁更快的方法。

【问题讨论】:

    标签: django performance


    【解决方案1】:

    首先,如果您的模型有两个具有相同关系的字段,您必须发送一个反向名称,即related_name,如下所示:

    class Contact(basemodel):
    
        item = models.ForeignKey(Item)
        recipient = models.ForeignKey(User,related_name='recipient_contact' )
        sender = models.ForeignKey(User,related_name='sender_contact' )
    

    之后,要检索发件人列表,您可以在实际发件人(用户)中进行查询,然后对计数进行注释:

    User.objects.filter(sender_contact__item=self.item).annotate(count=Count('sender_contact'))
    

    我想这会奏效!让我知道任何事情!

    【讨论】:

    • 比起向后的名称,我试图尽可能多地跳过编辑实际代码。
    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 2023-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    相关资源
    最近更新 更多