我希望标题没有误导性。根据m2m字段进行查询的匹配数量
无论如何,我有两个模型,都与第三个模型有m2m关系。
class Model1: keywords = m2m(Keyword)
class Model2: keywords = m2m(Keyword)
鉴于一个模型2实例的关键字是这样的:
keywords2 = model2_instance.keywords.all()
我需要找回它至少有一个关键字是keywords2,类似的型号1实例:
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)
必须有这样做的更快的方法。有任何想法吗?