如何'加入'多对多2个相关模型列表

时间:2018-03-29 21:28:34

标签: django django-queryset

我有2个型号的产品和类别,从产品到类别具有多对多的关系。

我有一个Product个对象列表和一个Product个ID列表。

使用产品列表ID,我得到类别:

categories = Category.objects.filter(products__in=products_list)

现在我想联合产品列表和类别,类似于Prefetch,但我没有Queryset,而是产品对象列表。

for product in products # the list with Product objects
  for category in categories:
   if ...
    ph.category = category

关系是多对多的关系在中间表中,所以我不知道如何访问,不为每个类别做一个新的查询。

我正在考虑以某种方式将“product_id”从中间表传递到Queryset.

中的类别

此外,我只需要每个Category的第一个Product,而不是所有from Bio.Seq import Seq from Bio.Alphabet import generic_protein from Bio.SeqFeature import SeqFeature, FeatureLocation seq = Seq("MKQHKAMIVALIVICITAVVAAL", generic_protein) f = SeqFeature(FeatureLocation(8, 15), type="domain") f.extract(seq) # returns: Seq('VALIVIC', ProteinAlphabet())

1 个答案:

答案 0 :(得分:1)

我建议您将产品列表转换为查询集,然后使用prefetch_related

product_ids = [p.pk for p in products]
product_qs = Product.objects.filter(pk__in=product_ids).select_related('categories')

for product in product_qs:
    product.categories.all() # This will be prefetched.