【问题标题】:Django list display many to many field optimize SQLDjango列表显示多对多字段优化SQL
【发布时间】: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


    【解决方案1】:

    如果我的理解正确,prefetch_related 可能就是您要搜索的内容。

    【讨论】:

      猜你喜欢
      • 2011-04-20
      • 1970-01-01
      • 2013-08-09
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      相关资源
      最近更新 更多