无法在没有“.queryset”属性或覆盖“.get_queryset()”方法的视图上应用 DjangoModelPermissions

新手上路,请多包涵

我收到错误“.accepted_renderer not set on Response resp 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

请帮帮我。我认为它的权限问题。

原文由 Wagh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 458
2 个回答

您可能已将 DjangoModelPermissions 设置为设置中的默认权限类别。就像是:

 REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.DjangoModelPermissions',
    )
}

DjangoModelPermissions 只能应用于具有 .queryset 属性或 .get_queryset() 方法的视图。

由于教程 2 使用 FBV,您可能需要将其转换为 CBV,或者一种简单的方法是为该视图指定不同的权限类。您必须在视图中使用 api_view 装饰器。然后您可以定义 permissions 如下所示:

 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_RENDERER_CLASSES': (
        'rest_framework.renderers.<corresponding_renderer>',
        ...
    )
}

原文由 Rahul Gupta 发布,翻译遵循 CC BY-SA 3.0 许可协议

我让它以另一种方式工作。我的登录用户是我创建的超级用户。所以我从管理员创建了另一个用户并让他成为员工用户并提供了所有权限。然后由该用户登录到管理员。

在 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',
    ]
}

它奏效了。

原文由 Wagh 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题