Python &引用;AssertionError:无法应用DjangoModelPermissions“;即使在视图中定义了get_queryset

Python &引用;AssertionError:无法应用DjangoModelPermissions“;即使在视图中定义了get_queryset,python,django,django-rest-framework,Python,Django,Django Rest Framework,即使我的视图正在覆盖get\u queryset() AssertionError: Cannot apply DjangoModelPermissions on a view that does not set `.queryset` or have a `.get_queryset()` method. 以下是我的看法: class PlayerViewSet(viewsets.ModelViewSet): serializer_class = PlayerSerializer

即使我的视图正在覆盖
get\u queryset()

AssertionError: Cannot apply DjangoModelPermissions on a view that does not set `.queryset` or have a `.get_queryset()` method.
以下是我的看法:

class PlayerViewSet(viewsets.ModelViewSet):

    serializer_class = PlayerSerializer

    def get_queryset(self):
        try:
            quality = self.kwargs['quality'].lower()
            print("Getting Player for %s"%quality)
            return Player.objects.filter(qualities__contains=quality)
        except:
            # todo: send out a 404
            print("No Players found for this quality :(")
            pass
My settings.py:

REST_FRAMEWORK = {
    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ]
}
编辑-其他信息:以下是URL.py中的条目:

router = routers.DefaultRouter()
router.register(r'^player-list/(?P<quality>\w+)', players.views.PlayerViewSet, base_name="Player List")
[...]
urlpatterns = [
    url(r'^api/', include(router.urls)),
] 
router=routers.DefaultRouter()
路由器.register(r'^player list/(?P\w+),players.views.PlayerViewSet,base_name=“player list”)
[...]
URL模式=[
url(r“^api/”,包括(router.url)),
] 

我不明白问题是什么。为什么DRF看不到我的
get\u queryset
方法?

我已经尝试在DRF 3.3.2上运行您的代码,并且可能会发现一些容易忽略的错误,这些错误可能会导致您提到的断言错误

  • 拼写错误的
    get\u queryset()
    。您的问题看起来不错,但请仔细检查您的代码以确定
  • get_queryset
    中的代码中,如果出现异常,则返回
    None
    。我尝试在
    get\u queryset
    下强制执行一个异常,并按照您的方式将其静音(最后不返回任何异常)。这导致了确切的断言错误。因此,请确保
    get\u queryset
    下的代码没有引发任何异常。我认为可能会引发异常的一个方面是,当命名的url组“quality”没有传递到
    self.kwargs
    中时

  • 旁注:当DRF调用权限类“
    has_permission
    方法时,它将api视图作为参数发送。然后,它使用api视图来确定查询集是什么。如果可以在“rest\u framework/permissions.py”(rest\u framework/permissions.py)中设置调试器,并在
    has\u permission
    方法中暂停,则可以再次检查
    queryset
    变量是否正确拾取,或者是否设置为无。在您的情况下,触发AssertionError的可能是None,然后您可以检查作为参数传递给函数的
    api\u视图
    实例是否实际引用了
    PlayerViewSet
    的实例。

    关于此问题的任何进展或更改?代码似乎没问题,我想知道问题出在哪里。我打赌这是件小事。如果我发现问题,将更新。您是否尝试清理pyc文件?这有时会有帮助。只需删除所有
    \uuuuupycache\uuuuuu
    文件夹,然后运行服务器。没有成功。这个怎么样?