当前位置:  开发笔记 > 后端 > 正文

如何在列表中显示多对多django更有效率

如何解决《如何在列表中显示多对多django更有效率》经验,为你挑选了0个好方法。

我正在使用django 1.8.我在django admin中显示了一个多对多的字段,就像这个例子一样.

class PurchaseOrder(models.Model):
    product = models.ManyToManyField('Product')
    vendor = models.ForeignKey('VendorProfile')
    dollar_amount = models.FloatField(verbose_name='Price')


class Product(models.Model):
    products = models.CharField(max_length=256)

    def __unicode__(self):
        return self.products

class PurchaseOrderAdmin(admin.ModelAdmin):
    fields = ['product', 'dollar_amount']
    list_display = ('get_products', 'vendor')

    def get_products(self, obj):
        return "\n".join([p.products for p in obj.product.all()])

问题是如果我每页显示100行,它会进行100次查询.对于外键,有一个神奇的list_select_related,但你不能在那里放置多对多字段.如何避免重复查询?

---更新:

我试过了:

def get_queryset(self, request):
    qs = super(PurchaseOrderAdmin, self).get_queryset(request)
    return qs.prefetch_related('products')

它仍在每行执行重复查询.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有