Django-rest-framework: TypeError: set_context () faltando 1 argumento posicional obrigatório: 'serializer_field'

Criado em 24 jun. 2019  ·  3Comentários  ·  Fonte: encode/django-rest-framework

Lista de controle

  • [] Eu verifiquei que esse problema existe no branch master da estrutura REST do Django.
  • [] Pesquisei problemas semelhantes em tíquetes abertos e fechados e não consigo encontrar uma duplicata.
  • [] Esta não é uma questão de uso. (Em vez disso, eles devem ser direcionados ao grupo de discussão .)
  • [] Isso não pode ser tratado como uma biblioteca de terceiros. (Preferimos que a nova funcionalidade esteja na forma de bibliotecas de terceiros, sempre que possível.)
  • [] Reduzi o problema ao caso mais simples possível.
  • [] Incluí um teste de falha como uma solicitação de pull. (Se você não puder fazer isso, ainda podemos aceitar o problema.)

Passos para reproduzir

classe GraphDomainSerializer (serializers.ModelSerializer):
user = serializers.HiddenField (default = serializers.CurrentUserDefault)

Comportamento esperado

Comportamento real

classe CurrentUserDefault (objeto):
def set_context (self, serializer_field):
self.user = serializer_field.context ['solicitação']. usuário

def __call__(self):
    return self.user

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

def get_default (self):
"" "
Retorne o valor padrão para usar ao validar os dados se não houver entrada
é fornecido 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

Arquivo "/Users/lishijin/.pyenv/versions/3.7.2/lib/python3.7/site-packages/rest_framework/fields.py", linha 490, em get_default
self.default.set_context (self)
TypeError: set_context () faltando 1 argumento posicional obrigatório: 'serializer_field'
[24 / jun / 2019 14:34:45] "POST / graphs / HTTP / 1.1" 500 21130

Comentários muito úteis

O valor padrão deve ser uma instância, não uma classe: serializers.CurrentUserDefault() conforme mostrado na documentação

Todos 3 comentários

O valor padrão deve ser uma instância, não uma classe: serializers.CurrentUserDefault() conforme mostrado na documentação

O padrão deve ser uma instância, não uma classe: serializers.CurrentUserDefault() conforme mostrado na documentação

resolveu o problema

O valor padrão deve ser uma instância, não uma classe: serializers.CurrentUserDefault() conforme mostrado na documentação

Obrigado , Você me ajudou a resolver este problema

Esta página foi útil?
0 / 5 - 0 avaliações