Python 无法对不具有“.queryset”属性或重写“.get\u queryset()”方法的视图应用DjangModelPermissions
我收到错误“.accepted\u渲染器未在响应响应api django上设置” 我正在学习django rest api教程。 Django版本我正在使用1.8.3 我跟着教程一直到第一部分。它工作正常。但是当我继续发送响应的第二部分时,我得到了一个错误Python 无法对不具有“.queryset”属性或重写“.get\u queryset()”方法的视图应用DjangModelPermissions,python,django,django-rest-framework,Python,Django,Django Rest Framework,我收到错误“.accepted\u渲染器未在响应响应api django上设置” 我正在学习django rest api教程。 Django版本我正在使用1.8.3 我跟着教程一直到第一部分。它工作正常。但是当我继续发送响应的第二部分时,我得到了一个错误 Cannot apply DjangoModelPermissions on a view that does not have `.queryset` property or overrides the `.get_queryset()`
Cannot apply DjangoModelPermissions on a view that does not have `.queryset` property or overrides the `.get_queryset()` method.
然后我尝试了其他的方法
.accepted_renderer not set on Response resp api django
请帮帮我。我认为是权限问题。您可能已经在设置中将
DjangoModelPermissions
设置为默认权限类。比如:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.DjangoModelPermissions',
)
}
DjangoModelPermissions
只能应用于具有.queryset
属性或.get\u queryset()
方法的视图
由于教程2使用FBV,您可能需要将其转换为CBV,或者简单的方法是为该视图指定不同的权限类。
您必须在视图中使用api\u视图
decorator。然后可以定义权限
,如下所示:
from rest_framework.decorators import api_view, permission_classes
from rest_framework import permissions
@api_view([..])
@permission_classes((permissions.AllowAny,))
def my_view(request)
...
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
]
}
要解决渲染器错误,需要将相应的渲染器添加到设置中
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.<corresponding_renderer>',
...
)
}
REST\u框架={
“默认渲染器类”:(
“rest_framework.renders.”,
...
)
}
我用另一种方式让它工作。
我的登录用户是我创建的超级用户。
所以我从admin创建了另一个用户,让他成为staff用户,并提供了所有权限。然后由该用户登录到管理员
在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.IsAuthenticated',
]
}
这是有效的。我的解决方案正如上面@ProfNandaa所指出的 快速修复,注释掉 “rest_framework.renders.DjangoModelPermissions”行—如果 遵循DRF教程2;也许你在书中加上了这一点 在主页示例中使用settings.py 在开始学习本教程之前,我确实从主页示例中添加了这一点,并且遇到了相同的问题 当我注释掉了有问题的代码时
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.DjangoModelPermissions',
)
}
通过settings.py,一切又恢复正常。这里已经列出了很多好的解决方案。在第二篇教程中,我也遇到了同样的问题。它显示: 无法将DjangModelPermissionsOranOnRedowly应用于 未设置
.queryset
或具有.get\u queryset()
方法
我更改了settings.py
以排除DEFAULT\u PERMISSION\u类
,如下所示:
from rest_framework.decorators import api_view, permission_classes
from rest_framework import permissions
@api_view([..])
@permission_classes((permissions.AllowAny,))
def my_view(request)
...
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
]
}
然后它成功运行。在找到这些答案之前,我尝试过这个方法。在我的例子中,(对于教程2,djangorestframework
3.7.7版),当我将设置更改为:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.AllowAny',
]
}
从中,您可以将其添加到视图中:
queryset=User.objects.none()
你能发布你的代码进行澄清吗?@EdwinLunando我也得到了同样的结果。这是非常容易复制,只需遵循从官方网站教程伟大!实际上,问题在于权限。在设置中或通过FBV中的装饰器明确定义权限可以解决这个问题。快速修复,暂时注释掉'rest\u framework.renders.DjangoModelPermissions'
行——如果您正在学习DRF教程2;在主页示例中,您可能已经在settings.py
中添加了该选项。在第二个代码块中,您还需要import rest\u framework.permissions
。这是一个更好的答案,因为它允许开发人员决定与视图一起使用的特定权限类。感谢你,因为这让我想到了为什么。谢谢