Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django查询中获取具有相似值的项数的最有效方法_Django_Performance - Fatal编程技术网

在Django查询中获取具有相似值的项数的最有效方法

在Django查询中获取具有相似值的项数的最有效方法,django,performance,Django,Performance,我正在寻找计算以下各项的最快方法: 给定这样的接触模型: class Contact(basemodel): item = models.ForeignKey(Item) recipient = models.ForeignKey(User, ) sender = models.ForeignKey(User, ) class Contact(basemodel): item = models.ForeignKey(Item) recipient =

我正在寻找计算以下各项的最快方法:

给定这样的接触模型:

class Contact(basemodel):

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

    item = models.ForeignKey(Item)
    recipient = models.ForeignKey(User,related_name='recipient_contact' )
    sender = models.ForeignKey(User,related_name='sender_contact' )
我正在寻找最快的查询,以获取特定项目的发件人列表,以及他们在此场景中拥有的联系人对象的数量

我会得到这样的寄件人名单 senders=Contact.objects.filter(item=self.item).values\u list('sender',flat=True)

但我需要计算每个发送者出现在列表中的时间


我相信有一种更简洁、更快的方法。

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

class Contact(basemodel):

    item = models.ForeignKey(Item)
    recipient = models.ForeignKey(User, )
    sender = models.ForeignKey(User, )
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'))

我想这会管用的!让我知道任何事情

至于倒过来的名字,我试着尽可能地跳过对实际代码的编辑。