问题在于: 我试图替换标准查询集:
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"时,会出现错误:
AssertionError:
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$&(._)\-]+'
所以如何正确覆盖方法?
答案 0 :(得分:13)
在最新的DRF中,如果您没有定义base_name
,则需要在视图集网址中明确设置queryset
。
所以,这样的事情应该做得很好:
router.register(r'my-model/', MyModelView, basename='MyModel')
请参阅:docs 希望它有所帮助。
答案 1 :(得分:1)
您必须在url.py文件中为register方法添加一个名为base_name的参数,就像url.py中的以下代码一样:
None
答案 2 :(得分:0)
您需要在您的 url conf 中设置 "java.io.InvalidClassException: javax.cache.configuration.FactoryBuilder$SingletonFactory; local class incompatible: stream classdesc serialVersionUID = 201402, local class serialVersionUID = 201305101634"
属性。 Docs here