在__str __()方法上的Django prefetch_related

时间:2017-09-01 14:11:56

标签: django database django-rest-framework

我的模特:

class B(models.Model):
    label = models.CharField()

class A(models.Model):
    b = models.OneToOneField(B, null=True, blank=True, on_delete=models.PROTECT)

    def __str__(self):
        return u'[{}] Event:'.format(self.b.label)

现在,在使用django调试工具栏的请求期间查看查询时,我注意到许多查询执行了200多次。我知道我将使用prefetch_related来解决,但是当在str方法内完成查找时,我必须把它放在哪里?

1 个答案:

答案 0 :(得分:3)

您的GenericViewModelViewSet应该有一个queryset属性,用于定义应该处理的设置。

您需要在那里添加prefetch_related / select_related

class UserList(generics.ListCreateAPIView):
    queryset = User.objects.all().prefetch_related('groups')
    serializer_class = UserSerializer
    permission_classes = (IsAdminUser,)
相关问题