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
文件夹,然后运行服务器。没有成功。这个怎么样?