Подтвердить что ты не робот

Невозможно применить 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

Пожалуйста, помогите мне. Я думаю, что это проблема с разрешением.

4b9b3361

Ответ 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': [
    ]
}

Затем он выполняется успешно. Я пробовал это, прежде чем нашел эти ответы.