Django列表显示多对多字段优化SQL

时间:2014-09-17 09:08:32

标签: django django-models django-admin many-to-many

我有以下型号。 (例如从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调用

1 个答案:

答案 0 :(得分:1)

如果我理解你正确prefetch_related可能就是你要找的东西。