我使用django parler(django-hvad的派生)进行翻译。在admin中,当显示具有manytomy关系的Foreignkey字段时,django将为每个字段运行一个查询:
所以当有300个服务时,会有同样多的查询。在
我认为get_queryset上的预取相关不适用于mantomany
过滤器/列表,如果我错了,请纠正我:
def get_queryset(self, request):
return super(DoctorAdmin, self).get_queryset(request).prefetch_related('translations', 'services__translations')
对查询数没有影响。在parler上启用缓存(正如作者建议的here)也无济于事,因为相同的查询不会重复,但这些过滤器上的每个项目都会在翻译项目的查询中调用(每次ID都不同)。所以,我要找的是一个与内部过滤器相关的选择/预取相关的。同时我也会检查你的应用程序,以防你已经解决了这样的问题。在
看起来您对多对多表使用了双下划线,而它应该是单下划线。也可以尝试在主表中添加
尝试:
显示模型.py文件会有帮助的。在
为了对其他人有所帮助,下面是我如何解决问题的方法,在管理中将查询从2k减少到30:
因此,重写表单,一旦进入表单,就用预取覆盖queryset。在
相关问题 更多 >
编程相关推荐