私は2つのモデルを持っています:
連絡先 - 個人に発生した連絡先に関する情報 クライアント - 連絡先で参照されている人物に関する情報
3 回以上連絡を取り合っているクライアントを見つける必要があります。これを行うには、このようなものが機能します。これがこれを行う最も効果的な方法かどうかはわかりませんが、クライアントをループすることなく仕事をするのは 1 行です。
client.objects.all().annotate(c_count=Count('contacted_client')).filter(c_count__gte=3)
今は少し難しくなります。連絡先には日付があります。
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
しかし、多くのクライアントに対してこのチェックを実行すると、遅くなるだけです。