I'm using django 1.8. I'm displaying a many-to-many field in django admin like this example.
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()])
The problem is that if I display 100 rows per page, it does 100 queries. For foreign keys, there is a magical list_select_related but you cannot put many-to-many fields in there. How can I avoid duplicate queries?
--- update:
I've tried:
def get_queryset(self, request):
qs = super(PurchaseOrderAdmin, self).get_queryset(request)
return qs.prefetch_related('products')
It is still doing duplicate queries per row.