我有一个Product模型。此模型有一个类别ManyToMany字段。我也有一个ProductPhoto模型,这个模型有一个产品FK字段。这个字段有一个相关的名称product_photos。
我的查询是这样的。
Product.objects.prefetch_related('categories', 'product_photos')
Product.objects.prefetch_related(
'categories',
Prefetch(
'product_photos', ProductPhoto.objects.select_related('product')
)
使用innerjoin可以完美地运行类别。但是product_photos不起作用。每行都因为获取照片而再次调用sql。就像
SELECT ••• FROM "core_productphoto" WHERE ("core_productphoto"."product_id" = 1729)
# Product Model
class Product(models.Model):
categories = TreeManyToManyField(
to='ProductCategory', related_name='products', verbose_name=_('categories')
)
class ProductPhoto(models.Model):
product = models.ForeignKey(
to='Product',
related_name='product_photos',
on_delete=models.CASCADE,
)
photo = models.ImageField(
null=True,
blank=True,
max_length=255,
)