我有两个模型:
联系人 - 有关发生在某个人身上的联系的信息 client - 有关在联系中引用的人的信息
我需要找到在联系中被引用 3 次或更多次的客户。为此,类似这样的工作。不确定这是执行此操作的最有效方法,但它是完成这项工作的一条线路,而我不必遍历客户端。
client.objects.all().annotate(c_count=Count('contacted_client')).filter(c_count__gte=3)
现在它变得更难了。联系人有日期。
我需要及时找到在 5 周或更长时间内联系过的所有客户:“查找 Max(contact_date)-Min(contact_date) > 5 周内联系中引用的所有客户”。我尝试使用相同的方法,但不知道如何做到这一点。
基于每个客户端计算这个的逻辑是这样的:
min_date = contact.objects.filter(client=self).aggregate(Min('date'))['date__min']
max_date = contact.objects.filter(client=self).aggregate(Max('date'))['date__max']
if (max_date - min_date).days > 5*7:
return True
else:
return False
但是,如果我为许多客户执行此检查,它就会变慢。