wake-up-neo.com

DjangoModelPermissions kann nicht auf eine Ansicht angewendet werden, die nicht über die Eigenschaft `.queryset` verfügt oder die Methode` .get_queryset () 'überschreibt

Ich erhalte die Fehlermeldung ".accepted_renderer nicht auf Response bzw. Django gesetzt".

Ich folge dem Django Rest-Api-Tutorial. Django-Version Ich verwende 1.8.3 Ich folgte dem Tutorial bis zum ersten Teil. Es hat richtig funktioniert. Aber als ich den zweiten Teil mit dem Senden der Antwort fortsetzte, bekam ich einen Fehler 

Cannot apply DjangoModelPermissions on a view that does not have `.queryset` property or overrides the `.get_queryset()` method.

Dann habe ich andere Möglichkeiten ausprobiert 

.accepted_renderer not set on Response resp api Django

Bitte hilf mir. Ich denke, seine Erlaubnisfrage.

44
Gaurav

Sie haben wahrscheinlich DjangoModelPermissions in Ihren Einstellungen als Standardberechtigungsklasse festgelegt. So etwas wie:

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

DjangoModelPermissions kann nur auf Ansichten angewendet werden, die eine .queryset-Eigenschaft oder eine .get_queryset()-Methode haben. 

Da in Tutorial 2 FBVs verwendet werden, müssen Sie es wahrscheinlich in ein CBV konvertieren. Alternativ können Sie eine andere Berechtigungsklasse für diese Ansicht angeben. Sie müssen den Dekorator api_view in Ihrer Ansicht verwenden. Sie können dann permissions wie folgt definieren:

from rest_framework.decorators import api_view, permission_classes
from rest_framework import permissions

@api_view([..])
@permission_classes((permissions.AllowAny,))
def my_view(request)
    ...

Um den Renderer-Fehler zu beheben, müssen Sie den entsprechenden Renderer zu Ihren Einstellungen hinzufügen.

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.<corresponding_renderer>',
        ...
    )
}
69
Rahul Gupta

Ich habe es auf eine andere Art und Weise zum Laufen gebracht. Mein angemeldeter Benutzer war der Superuser, den ich erstellt habe. Also habe ich einen anderen Benutzer von Admin erstellt und ihn zum Benutzer des Benutzers gemacht und alle Berechtigungen erteilt. Dann von diesem Benutzer bei admin angemeldet.

In der Datei settings.py habe ich den Code geändert.

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

Und es hat funktioniert.

14
Gaurav

Die Lösung für mich wurde von @ProfNandaa oben angegeben

Quick Fix, kommentieren Sie die .__ aus. 'rest_framework.renders.DjangoModelPermissions' Zeile für jetzt - wenn Sie folgen dem DRF-Tutorial 2; und vielleicht hatten Sie das in .__ hinzugefügt. settings.py während des Homepage-Beispiels.

Ich hatte dies zwar aus dem Homepage-Beispiel hinzugefügt, bevor ich mit dem Tutorial begonnen hatte, und schlug das gleiche Problem.

Wenn ich den fehlerhaften Code auskommentierte

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

von settings.py hat alles wieder gut funktioniert.

4
Arctic Giraffe

Hier sind bereits viele gute Lösungen aufgeführt. Im zweiten Tutorial stand ich vor demselben Problem. Es zeigte sich:

DjangoModelPermissionsOrAnonReadOnly kann nicht auf eine Ansicht angewendet werden, die .__ tut. .queryset nicht gesetzt oder eine .get_queryset()-Methode haben.

Ich habe den settings.py geändert, um DEFAULT_PERMISSION_CLASSES wie folgt auszuschließen:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
    ]
}

Dann läuft es erfolgreich. Ich habe es versucht, bevor ich diese Antworten gefunden habe.

1
arsho

In meinem Fall (für Tutorial 2, djangorestframework ver 3.7.7) funktioniert es, wenn ich folgende Einstellungen ändere:

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