Jad*_*d S 5 python django django-rest-framework
即使我的观点重写,我也会收到以下错误.get_queryset()
AssertionError: Cannot apply DjangoModelPermissions on a view that does not set `.queryset` or have a `.get_queryset()` method.
Run Code Online (Sandbox Code Playgroud)
这是我的观点:
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
Run Code Online (Sandbox Code Playgroud)
我的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'
]
}
Run Code Online (Sandbox Code Playgroud)
编辑 - 附加信息:这是urls.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)),
]
Run Code Online (Sandbox Code Playgroud)
我不明白这是什么问题.为什么DRF没有看到我的get_queryset方法?
我尝试在 DRF 3.3.2 上运行您的代码,并且可以找出一些容易错过的错误,这些错误可能会导致您提到的 AssertionError 。
get_queryset()。您的问题在这里看起来不错,但请仔细检查您的代码以确定。get_queryset,您将None在出现异常时返回。我尝试按照您所做的方式强制异常get_queryset并使其静音(最后返回 None )。这导致了确切的断言错误。因此,请确保您的代码get_queryset不会引发任何异常。我认为可能会引发异常的一个领域是,当命名的 url 组“quality”未传递到self.kwargs.旁注:当 DRF 调用权限类的has_permission方法时,它会发送 api 视图作为参数。然后它使用 api 视图来找出您的查询集是什么。如果您可以在“rest_framework/permissions.py”(此处)设置调试器并在方法内暂停has_permission,则可以仔细检查变量是否queryset已正确拾取或设置为 None。在您的情况下,它可能会出现为 None ,这就是触发 AssertionError 的原因,然后您可以检查作为api_view参数传递给函数的实例是否实际上引用了实例PlayerViewSet。
| 归档时间: |
|
| 查看次数: |
598 次 |
| 最近记录: |