这是我的 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 的快照
有许多重复的时间成本查询,例如 select * from 'topics_media'。我该如何解决这个问题?
最佳答案
您面临着 django QuerySets 的典型问题。您收到此查询是因为当您访问未事先预取的相关对象时,您会进行额外的数据库命中。
了解更多 https://docs.djangoproject.com/en/1.10/ref/models/querysets/#select-related和 https://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/