base_name参数未指定,并且无法自动确定视图集中的名称,因为它没有.queryset属性

时间:2018-01-31 18:00:02

标签: python-3.x django-rest-framework django-views

问题在于: 我试图替换标准查询集

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$&(._)\-]+'

所以如何正确覆盖方法?

3 个答案:

答案 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