Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法对不具有“.queryset”属性或重写“.get\u queryset()”方法的视图应用DjangModelPermissions_Python_Django_Django Rest Framework - Fatal编程技术网

Python 无法对不具有“.queryset”属性或重写“.get\u queryset()”方法的视图应用DjangModelPermissions

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()`

我收到错误“.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()` 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
。这是一个更好的答案,因为它允许开发人员决定与视图一起使用的特定权限类。感谢你,因为这让我想到了为什么。谢谢