How to make many-to-many in django display list more efficient

I am using django 1.8. I show many, many fields in django admin, for example 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 show 100 lines per page, it performs 100 requests. There is a magic list_select_related for foreign keys, but you cannot put many-to-many fields there. How to avoid duplicate requests?

--- update:

I tried:

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

It still performs duplicate queries in a row.

+5
source share
1 answer

Do you also need to do select_related('product') as part of get_queryset ?

It’s hard to say, because I don’t see a model relationship

0
source

Source: https://habr.com/ru/post/1263079/


All Articles