python - Django,我的 TabularInline 中有许多重复的查询

标签 python mysql django orm

这是我的 models.py 的一部分:

class Media(TimeStampedModel):
    name = models.CharField(max_length=20)

class Topic(TimeStampedModel):
    medias = models.ManyToManyField(Media, through='TopicAndMedia')

class TopicAndMedia(models.Model):
    topic = models.ForeignKey(Topic)
    media = models.ForeignKey(Media)
    order = models.IntegerField(default=0)

这是我的 admin.py 的一部分:

class TopicAndMediaInline(admin.TabularInline):
    model = TopicAndMedia

class TopicAdmin(admin.ModelAdmin):
    inlines = (TopicAndMediaInline, )
    ...

当我访问 TOPIC 管理站点时,速度太慢。这是 django-debug-tool 的快照

enter image description here

有许多重复的时间成本查询,例如 select * from 'topics_media'。我该如何解决这个问题?

最佳答案

您面临着 django QuerySets 的典型问题。您收到此查询是因为当您访问未事先预取的相关对象时,您会进行额外的数据库命中。

了解更多 https://docs.djangoproject.com/en/1.10/ref/models/querysets/#select-relatedhttps://docs.djangoproject.com/en/1.10/ref/models/querysets/#prefetch-related

这应该可以解决您的问题

class TopicAdmin(admin.ModelAdmin):
    inlines = (TopicAndMediaInline,)

    def get_queryset(self, request):
        qs = super(TopicAdmin, self).get_queryset(request)
        qs = qs.prefetch_related('medias')
        return qs 

关于python - Django,我的 TabularInline 中有许多重复的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40279763/

相关文章:

python - 如何返回xpath中元素的类?

python - 为 python 导出 c++ 函数,传递几个字符串作为参数

python - 创建新实例时如何分配ForeignKey字段

python - 分配给属性引用时出现类型错误?

python - 训练模型后评估建议

php - Mysql Codeigniter Active Record - 如何执行 where_in 查询并返回正确的结果顺序?

php - 在codeigniter中插入数据库的图像路径

php - 在一个php脚本中使用多个数据库

django - 如何使用 FileFields 限制 ModelForms 文件上传的文件类型?

django - Google App Engine 上的 Django 应用程序是如何构建的?