我正在寻找计算以下内容的最快方法:
给出这样的Contact模型:
class Contact(basemodel):
item = models.ForeignKey(Item)
recipient = models.ForeignKey(User, )
sender = models.ForeignKey(User, )
我正在寻找最快的查询来获取特定项目的发件人列表,其中包含他们为此场景设置的联系对象的数量。
我会得到像这样的发件人名单 发件人= Contact.objects.filter(item = self.item).values_list('sender',flat = True)
但我需要计算每个发件人在列表中的时间。
我确信有一种更清洁的方式。
答案 0 :(得分:2)
首先,如果您的模型有两个具有相同关系的字段,则必须发送一个向后名称,即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'))
我想这会奏效!让我知道任何事情!