我正在尝试替换标准查询集:
queryset: MyModel.objects.all()
在我的:
def get_queryset(self, username=None):
if username is not None:
user = UserModel.objects.get(username=username)
queryset = MyModel.filter(author=user)
return queryset
else:
queryset = MyModel.objects.all()
return queryset
当我删除"queryset",只留下"get_queryset"时,出现错误:
Assert错误:未指定base_name
参数,无法从视图集中自动确定名称,因为它没有.queryset
属性。
所有这些看起来是这样的:
class MyModelView(viewsets.ModelViewSet):
permissions_classes = (permissions.IsAuthenticated,)
serializer_class = MyModelleSerializer
def get_queryset(self, username=None):
if username is not None:
user = UserModel.objects.get(username=username)
queryset = MyModel.filter(author=user)
return queryset
else:
queryset = MyModel.objects.all()
return queryset
lookup_field = 'username'
lookup_value_regex = '[a-zA-Z0-9$&(._)\-]+'
那么如何正确地重写方法呢?
4条答案
按热度按时间ejk8hzay1#
在最新的DRF中,如果没有定义
queryset
,需要在视图集url中显式设置base_name
。所以,像这样的东西应该会有好处:
请参见:docs
voase2hg2#
必须为www.example.com文件中的register方法添加一个名为
basename
的参数url.py,类似于url.py中的以下代码:zbdgwd5y3#
您需要在您的url conf.Docs中设置
basename
属性8zzbczxx4#
在我的例子中,我使用了Rest Framework默认路由器,并将视图名称更改为与模型名称完全匹配,从而解决了这个问题。
查看:
型号:
因此只需将MyModelView更改为Model即可。