タイトルが誤解を与えないことを願っています。m2mフィールドに基づくクエリの一致数で並べ替え
とにかく、私は2つのモデルを持っていて、どちらも第3のモデルとm2mの関係を持っています。このようなモデル2インスタンスのキーワードを考える
class Model1: keywords = m2m(Keyword)
class Model2: keywords = m2m(Keyword)
:私はkeywords2である少なくともキーワードを持つMODEL1インスタンスを取得する必要が
keywords2 = model2_instance.keywords.all()
、のようなもの:
Model1.objects.filter(keywords__in=keywords2)
と一致するキーワードの数で並べ替えます( 'in'フィールドルックアップを使用してその可能性は考えられません)。質問は、どうすればいいのですか?
私はModel1の各インスタンスを手作業でやりとりし、すべての試合の結果の辞書に追加したいと思っていますが、これは数万のレコードに対してスケールする必要があります。これを行うためのより高速な方法が存在しなければならない
result = {}
keywords2_ids = model2.keywords.all().values_list('id',flat=True)
for model1 in Model1.objects.all():
keywords_matched = model1.keywords.filter(id__in=keywords2_ids).count()
objs = result.get(str(keywords_matched), [])
result[str(keywords_matched)] = objs.append(obj)
:ここで私はそれのようなの想像方法です。何か案は?