我很困惑。查看ViewSet源代码,看起来我应该无法在视图集中定义查询集,然后只是覆盖get queryset函数以获取我想要的任何查询集。但我的代码失败了这个错误:
AssertionError: `base_name` argument not specified, and could not automatically determine the name from the viewset, as it does not have a `.queryset` attribute.
所以,即使我覆盖了queryset属性,我仍然需要在开始时将它设置为某个假属性...这样可行,但是定义查询集然后只是稍后覆盖它会感觉很奇怪。
class StudyQuestion(viewsets.ReadOnlyModelViewSet):
queryset = Model.objects.all()
serializer_class = ModelSerializer
permission_classes = (permissions.IsAuthenticated, )
def get_queryset(self):
""""""
return Model.objects.order_by('-word__frequency')
答案 0 :(得分:3)
DRF ModelViewSet使用queryset
派生URL基础。如果未设置queryset
属性,DRF会在注册路由器时声明您使用可选的base_name
属性来声明基础。
在DRF文档中查看此页面:
答案 1 :(得分:2)
DRF路由器抱怨,因为它不能automatically generate a basename for the viewset:
base_name - 用于创建的URL名称的基础。如果未设置,将根据视图集的queryset属性自动生成基本名称(如果有)。请注意,如果视图集不包含queryset属性,则必须在注册视图集时设置base_name。