我正在尝试在自定义管理器中实现select_related,以优化Django admin中的数据库查询数量。
managers.py:
class TargetShapeColorManager(models.Manager):
def get_queryset(self):
return TargetShapeColorQuerySet(self.model, using=self._db)
def add_base_target_shape_data(self):
return self.get_queryset().select_related('base_target_shape').add_base_target_shape_data()
admin.py:
class TargetShapeColorAdmin(admin.ModelAdmin):
model = TargetShapeColor
def get_queryset(self, request):
queryset = super().get_queryset(request)
return queryset.add_base_target_shape_data()
以这种方式运行它时,我有7个查询(包括3个与“ base_target_shape”的3个相对应的查询,应该由select_related避免)
如果select_related位于管理员中(请参见下文),则一切正常,并且我只有4个查询。
managers.py:
class TargetShapeColorManager(models.Manager):
def get_queryset(self):
return TargetShapeColorQuerySet(self.model, using=self._db)
def add_base_target_shape_data(self):
return self.get_queryset().add_base_target_shape_data()
admin.py:
class TargetShapeColorAdmin(admin.ModelAdmin):
model = TargetShapeColor
def get_queryset(self, request):
queryset = super().get_queryset(request)
return queryset.select_related('base_target_shape').add_base_target_shape_data()
有人可以告诉我这是否是正常行为吗?
并向我解释为什么select_related('base_target_shape')位于自定义管理器中时为何不起作用?
预先感谢