【发布时间】:2014-11-11 05:55:33
【问题描述】:
我有以下这些模型。 (示例从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 查询集函数的事情来将所有 SomeOtherModel 加载到内存中
def queryset(self, request):
qs = super(MyModel, self).queryset(request).select_related('others')
我的问题是,我们如何优化这种模型的数据库调用
【问题讨论】:
标签: django django-models django-admin many-to-many