Django-rest-framework: TypeError: set_context () falta 1 argumento posicional requerido: 'serializer_field'

Creado en 24 jun. 2019  ·  3Comentarios  ·  Fuente: encode/django-rest-framework

Lista de Verificación

  • [] He verificado que ese problema existe en la rama master del marco Django REST.
  • [] He buscado problemas similares tanto en tickets abiertos como cerrados y no puedo encontrar un duplicado.
  • [] Esta no es una pregunta de uso. (En su lugar, deben dirigirse al grupo de discusión ).
  • [] Esto no se puede tratar como una biblioteca de terceros. (Preferimos que la nueva funcionalidad esté en forma de bibliotecas de terceros siempre que sea posible).
  • [] He reducido el problema al caso más simple posible.
  • [] He incluido una prueba fallida como una solicitud de extracción. (Si no puede hacerlo, aún podemos aceptar el problema).

pasos para reproducir

clase GraphDomainSerializer (serializadores.ModelSerializer):
usuario = serializadores.HiddenField (predeterminado = serializadores.CurrentUserDefault)

Comportamiento esperado

Comportamiento real

clase CurrentUserDefault (objeto):
def set_context (self, serializer_field):
self.user = serializer_field.context ['solicitud']. usuario

def __call__(self):
    return self.user

def __repr__(self):
    return unicode_to_repr('%s()' % self.__class__.__name__)

def get_default (uno mismo):
"" "
Devuelve el valor predeterminado para usar al validar datos si no hay entrada
se proporciona para este campo.

    If a default has not been set for this field then this will simply
    raise `SkipField`, indicating that no value should be set in the
    validated data for this field.
    """
    if self.default is empty or getattr(self.root, 'partial', False):
        # No default, or this is a partial update.
        raise SkipField()
    if callable(self.default):
        if hasattr(self.default, 'set_context'):
            **self.default.set_context(self)**
        return self.default()
    return self.default

Archivo "/Users/lishijin/.pyenv/versions/3.7.2/lib/python3.7/site-packages/rest_framework/fields.py", línea 490, en get_default
self.default.set_context (self)
TypeError: set_context () falta 1 argumento posicional requerido: 'serializer_field'
[24 / Jun / 2019 14:34:45] "POST / graphs / HTTP / 1.1" 500 21130

Comentario más útil

El valor predeterminado debe ser una instancia, no una clase: serializers.CurrentUserDefault() como se muestra en la documentación

Todos 3 comentarios

El valor predeterminado debe ser una instancia, no una clase: serializers.CurrentUserDefault() como se muestra en la documentación

El valor predeterminado debe ser una instancia, no una clase: serializers.CurrentUserDefault() como se muestra en la documentación

resolvió el problema

El valor predeterminado debe ser una instancia, no una clase: serializers.CurrentUserDefault() como se muestra en la documentación

Gracias, me ayudaste a resolver este problema.

¿Fue útil esta página
0 / 5 - 0 calificaciones