2017-09-01 36 views
0

我的模型:Django的prefetch_related上__str __()方法

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

不!不要把它放在'__str__'中。请发布您的查看代码,这很可能是所有这些查询发生的地方 –

+0

200+次是由可浏览的API – user1518217

+0

形式的选择引起的,我认为这不是可定制的。只要最终用户没有看到该页面,就可以。你应该优化你自己的观点 –

回答

1

你的GenericViewModelViewSet应该有一个queryset属性,它定义了它应该工作的设置。

您需要在那里添加prefetch_related/select_related

class UserList(generics.ListCreateAPIView): 
    queryset = User.objects.all().prefetch_related('groups') 
    serializer_class = UserSerializer 
    permission_classes = (IsAdminUser,) 
+0

是全部()必要的? – user1518217