我正在使用 django-parler(django-hvad 的衍生产品)进行翻译。在管理中显示具有多对多关系的外键字段时,django 为每个字段运行一个查询:
因此,当有 300 个服务时,就会有尽可能多的查询。
我认为 get_queryset 上的 prefetch_related 不适用于mantomany
过滤器/列表,如果我错了,请纠正我:
def get_queryset(self, request):
return super(DoctorAdmin, self).get_queryset(request).prefetch_related('translations', 'services__translations')
对查询数量没有影响。在 parler 上启用缓存(正如作者在此处建议的那样)也无济于事,因为不会重复相同的查询,但在查询已翻译项目时会调用这些过滤器上的每个项目(ID 每次都不同)。所以,我正在寻找的是内部过滤器上的 select_related/prefetch_related 。同时,我还将审查您的应用程序,以防您已经解决了此类问题。