我有两种模式:
联系 - 有关与某人发生联系的信息 客户 - 有关联系人中提及的人的信息
我需要找到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
但是,如果我为许多客户执行此检查,它就会变慢。