programing

`.queryset` 속성이 없거나`.get_queryset ()`메서드를 재정의하는 뷰에는 DjangoModelPermissions를 적용 할 수 없습니다.

copyandpastes 2021. 1. 19. 08:19
반응형

`.queryset` 속성이 없거나`.get_queryset ()`메서드를 재정의하는 뷰에는 DjangoModelPermissions를 적용 할 수 없습니다.


".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

제발 도와주세요. 허가 문제라고 생각합니다.


설정 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>',
        ...
    )
}

다른 방식으로 작동하게했습니다. 로그인 한 사용자는 내가 만든 수퍼 유저입니다. 그래서 나는 관리자로부터 다른 사용자를 만들고 그를 직원 사용자로 만들고 모든 권한을 제공했습니다. 그런 다음 해당 사용자가 관리자에 로그인했습니다.

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에서 모든 것이 다시 잘 작동했습니다.


제 경우에는 (튜토리얼 2, djangorestframework버전 3.7.7의 경우) 설정을 다음과 같이 변경하면 작동합니다.

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.AllowAny',
    ]
}

여기에 이미 나열된 좋은 솔루션이 많이 있습니다. 두 번째 튜토리얼에서도 같은 문제에 직면했습니다. 그것은 보여주고 있었다 :

설정하지 않는 뷰에 DjangoModelPermissionsOrAnonReadOnly를 적용 할 수 없습니다 .queryset또는이 .get_queryset()방법을.

다음과 같이 settings.py제외하도록 변경했습니다 DEFAULT_PERMISSION_CLASSES.

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
    ]
}

Then it runs successfully. I tried this before I have found these answers.

ReferenceURL : https://stackoverflow.com/questions/31335736/cannot-apply-djangomodelpermissions-on-a-view-that-does-not-have-queryset-pro

반응형