我如何在related_name上使用prefetch_related

时间:2019-04-24 11:32:50

标签: django django-rest-framework django-orm

我有一个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,
    )


0 个答案:

没有答案