web-dev-qa-db-ja.com

`.queryset`プロパティを持たない、または` .get_queryset() `メソッドをオーバーライドするビューにDjangoModelPermissionsを適用できません

「Response resp api Djangoで.accepted_rendererが設定されていません」というエラーが表示されます。

私はDjango rest-api tutorial。Djangoバージョン1.8.3を使用しています。最初のパートまでチュートリアルに従いました。応答の送信の2番目の部分を続けましたが、エラーが発生しました

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

私を助けてください。その許可の問題だと思います。

53
Gaurav

設定でデフォルトの許可クラスとして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>',
        ...
    )
}
_
81
Rahul Gupta

私はそれを別の方法で機能させました。ログインしているユーザーは、作成したスーパーユーザーです。だから私は管理者から別のユーザーを作成し、彼をスタッフユーザーにして、すべての権限を提供しました。次に、そのユーザーによってadminにログインしました。

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

そしてそれは働いた。

15
Gaurav

私の解決策は、上記の@ProfNandaaが指摘したとおりでした

クイックフィックス、「rest_framework.renders.DjangoModelPermissions」の行を今のところコメントアウトします-DRFチュートリアル2に従っている場合;そして、おそらくあなたはホームページの例の中でそれをsettings.pyに追加したでしょう。

チュートリアルに着手する前に、私は実際にホームページの例からこれを追加し、同じ問題にぶつかりました。

問題のコードをコメントアウトしたとき

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

settings.pyからはすべて正常に機能しました。

4
Arctic Giraffe

私の場合(チュートリアル2、djangorestframework ver 3.7.7の場合)、設定を次のように変更すると機能します。

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

ここにはすでに多くの優れたソリューションがリストされています。 2番目のチュートリアルでも同じ問題に直面しました。それは示していました:

_.queryset_を設定しないビューまたは.get_queryset()メソッドを持たないビューにDjangoModelPermissionsOrAnonReadOnlyを適用できません。

以下のように_settings.py_を変更して_DEFAULT_PERMISSION_CLASSES_を除外しました:

_REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
    ]
}
_

その後、正常に実行されます。これらの答えを見つける前にこれを試しました。

1
arsho