だから私は次のクエリを持っています:
Person.objects.annotate(film_count=Count('film')).filter(film_count__gte=3).order_by('?')[0]
これは、3 つ以上のフィルムを持っているランダムな人物を引き出します。ただし、django のドキュメント ( https://docs.djangoproject.com/en/dev/ref/models/querysets/#order-by-fields ) に記載されているように、('?') を使用したこのアプローチは非常に遅く、このクエリがユーザーによって頻繁に使用されるように計画してください。
それを行う1つの方法は、そのクエリの完全なリストによって生成されたすべての主キーを取得し、それをtxtファイルに保存して、毎回ランダムに選択することだと思います. しかし、もっとエレガントな解決策があるかどうか疑問に思っていますか?
別の方法は次のようにすることだと思います:
Person.objects.annotate(film_count=Count('film')).filter(film_count__gte=3).get(pk=randint(1,num_persons))
ここで、num_persons はデータベース内の人数です。その人物がクエリと一致せず、DoesNotExist
エラーがスローされた場合は、単純にもう一度実行します。