在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'))
我想这会管用的!让我知道任何事情 至于倒过来的名字,我试着尽可能地跳过对实际代码的编辑。