Невозможно применить DjangoModelPermissions к представлению, которое не имеет свойства `.queryset` или переопределяет метод`.get_queryset() `
Я получаю сообщение об ошибке ".accepted_renderer не установлен в 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
Пожалуйста, помогите мне. Я думаю, что это проблема с разрешением.
Ответы
Ответ 1
Вероятно, вы установили DjangoModelPermissions
в качестве класса разрешений по умолчанию в своих настройках. Что-то вроде:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.DjangoModelPermissions',
)
}
DjangoModelPermissions
может применяться только к представлениям, которые имеют свойство .queryset
или .get_queryset()
.
Так как в Tutorial 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>',
...
)
}
Ответ 2
Я заработал по-другому.
Мой зарегистрированный пользователь был суперпользователем, который я создал.
Поэтому я создал другого пользователя из администратора и сделал его персональным пользователем и предоставил все разрешения. Затем зарегистрировался администратором этого пользователя.
В файле settings.py я изменил код.
REST_FRAMEWORK = {
# Use Django standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
]
}
И это сработало.
Ответ 3
Решение для меня было таким, как указано @ProfNandaa выше
Быстрое исправление, закомментируйте 'rest_framework.renders.DjangoModelPermissions' на данный момент - если вы следуют учебнику DRF 2; и, возможно, вы добавили, что в settings.py во время примера на домашней странице.
Я действительно добавил это из примера на домашней странице, прежде чем приступать к учебнику и попал в ту же проблему.
Когда я прокомментировал нарушающий код
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.DjangoModelPermissions',
)
}
из settings.py все это снова работало нормально.
Ответ 4
Есть много хороших решений, которые уже перечислены здесь. Я также столкнулся с той же проблемой во втором учебнике. Он показывал:
Невозможно применить DjangoModelPermissionsOrAnonReadOnly к представлению, которое делает не установлен .queryset
или имеет метод .get_queryset()
.
Затем я изменил settings/py
, чтобы исключить DEFAULT_PERMISSION_CLASSES
, как показано ниже:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
]
}
Затем он выполняется успешно. Я пробовал это, прежде чем нашел эти ответы.