Estoy recibiendo el mensaje de error «.accepted_renderer no se establece en Respuesta resp api django».

Estoy siguiendo el django rest api tutorial.
Django versión que estoy utilizando 1.8.3
He seguido el tutorial hasta la primera parte. Funcionó correctamente. Pero cuando seguí la 2ª parte en el envío de la respuesta, tengo un error

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

Entonces traté de otras maneras tengo

.accepted_renderer not set on Response resp api django

Por favor que me ayude. Creo que es problema de permisos.

InformationsquelleAutor Gaurav | 2015-07-10

5 Comentarios

  1. 81

    Usted probablemente ha establecido DjangoModelPermissions como un defecto el permiso de la clase en su configuración. Algo así como:

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

    DjangoModelPermissions sólo se pueden aplicar a las vistas que tienen un .queryset propiedad o .get_queryset() método.

    Ya Tutorial 2 utiliza FBVs, usted probablemente necesita para convertir a un CBV o una forma fácil es para especificar una distinta clase de permiso para que se vista.
    Usted debe estar utilizando el api_view decorador en su punto de vista. A continuación, puede definir permissions como la siguiente:

    from rest_framework.decorators import api_view, permission_classes
    from rest_framework import permissions
    
    @api_view([..])
    @permission_classes((permissions.AllowAny,))
    def my_view(request)
        ...

    Para resolver el representador de error, es necesario agregar la correspondiente renderizador para su configuración.

    REST_FRAMEWORK = {
        'DEFAULT_RENDERER_CLASSES': (
            'rest_framework.renderers.<corresponding_renderer>',
            ...
        )
    }
    • Solución rápida, comentar el 'rest_framework.renders.DjangoModelPermissions' línea por ahora, si usted está siguiendo la DRF Tutorial 2; y tal vez usted ha añadido que en settings.py durante la página principal ejemplo.
    • En el segundo bloque de código, deberá import rest_framework.permissions así.
    • Esta es una mucho mejor respuesta ya que permite que el dev para decidir sobre una determinada clase de permiso para el uso con la vista. Apreciar como este me llevó a los por qué. Gracias!
  2. 15

    Me consiguió trabajo en otra forma.
    Mi usuario ha iniciado la sesión fue el superusuario que he creado.
    Así que he creado otro usuario de admin y le hizo el personal de usuario y proporciona todos los permisos. A continuación, se registra en administración por el usuario.

    En settings.py archivo he cambiado el código.

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

    Y funcionó.

    • Genial!!! En realidad, el problema estaba en los permisos. La definición de permisos explícitamente en la configuración o a través de el decorador en FBV podría resolver el problema.
  3. 4

    Solución para mí fue como señala @ProfNandaa por encima de

    Solución rápida, un comentario fuera de la
    ‘rest_framework.renders.DjangoModelPermissions’ línea por ahora, si usted
    está siguiendo a la DRF Tutorial 2; y tal vez usted ha añadido que en
    los ajustes.py durante la página de inicio ejemplo.

    Me había hecho añadido este desde la página de inicio ejemplo antes de embarcarse en el tutorial y el éxito de la misma cuestión.

    Cuando me comentó el código erróneo

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

    de settings.py funcionaba todo bien de nuevo.

  4. 2

    En mi caso, (para el tutorial 2, djangorestframework ver 3.7.7), funciona cuando cambio la configuración a:

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

    Hay un montón de buenas soluciones ya mencionados aquí. Yo también enfrentan el mismo problema en el segundo tutorial. Se estaba mostrando:

    No se puede aplicar DjangoModelPermissionsOrAnonReadonly en una vista que hace
    no se establece .queryset o tener un .get_queryset() método.

    He cambiado el settings.py para excluir DEFAULT_PERMISSION_CLASSES como la siguiente:

    REST_FRAMEWORK = {
        'DEFAULT_PERMISSION_CLASSES': [
        ]
    }

    A continuación, se ejecuta con éxito. He intentado esto antes de que yo he encontrado estas respuestas.

Dejar respuesta

Please enter your comment!
Please enter your name here