1

我有两个模型:

联系人 - 有关发生在某个人身上的联系的信息 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

但是,如果我为许多客户执行此检查,它就会变慢。

4

0 回答 0