我有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())
。
答案 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.