我有以下型号。 (例如从http://www.jmccauli.com/posts/3-django-list_display-and-manytomany-fields/购买的)
from django.db import models
class SomeOtherModel(models.Model):
title = models.CharField(max_length=50)
class MyModel(models.Model):
others = models.ManyToManyField('SomeOtherModel')
由于Django不支持多对多字段,要显示它,我必须编写一个自定义函数
class MyModelAdmin(admin.ModelAdmin):
list_display = ('display_others',)
def display_others(self):
return ', '.join([ other.title for other in self.others.all() ])
但是,我要说它有100个MyModel,每个都有5个SomeOtherModel,然后每次显示列表时,数据库都必须至少有100次调用才能加载额外的数据。我可以用另一种方法来优化这个电话吗?我们可以做一些事情,比如覆盖django queryset函数来将所有SomeOtherModel加载到内存
def queryset(self, request):
qs = super(MyModel, self).queryset(request).select_related('others')
我的问题是,我们如何为这种模型优化db调用