Django-rest-framework: TypeError : set_context() manquant 1 argument de position requis : 'serializer_field'

Créé le 24 juin 2019  ·  3Commentaires  ·  Source: encode/django-rest-framework

Liste de contrôle

  • [ ] J'ai vérifié que ce problème existe avec la branche master du framework Django REST.
  • [ ] J'ai recherché des problèmes similaires dans les tickets ouverts et fermés et je ne trouve pas de doublon.
  • [ ] Ce n'est pas une question d'utilisation. (Ceux-ci devraient plutôt être dirigés vers le groupe de discussion .)
  • [ ] Cela ne peut pas être traité comme une bibliothèque tierce. (Nous préférons que les nouvelles fonctionnalités se présentent sous la forme de bibliothèques tierces dans la mesure du possible.)
  • [ ] J'ai réduit le problème au cas le plus simple possible.
  • [ ] J'ai inclus un test d'échec en tant que demande d'extraction. (Si vous ne pouvez pas le faire, nous pouvons toujours accepter le problème.)

Étapes à reproduire

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

Comportement attendu

Comportement réel

classe CurrentUserDefault(objet):
def set_context(self, serializer_field):
self.user = serializer_field.context['request'].user

def __call__(self):
    return self.user

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

def get_default(self):
"""
Renvoie la valeur par défaut à utiliser lors de la validation des données si aucune entrée
est prévu pour ce champ.

    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

Fichier "/Users/lishijin/.pyenv/versions/3.7.2/lib/python3.7/site-packages/rest_framework/fields.py", ligne 490, dans get_default
self.default.set_context(self)
TypeError : set_context() manquant 1 argument de position requis : 'serializer_field'
[24/Jun/2019 14:34:45] "POST /graphs/ HTTP/1.1" 500 21130

Commentaire le plus utile

La valeur par défaut doit être une instance, pas une classe : serializers.CurrentUserDefault() comme indiqué dans la documentation

Tous les 3 commentaires

La valeur par défaut doit être une instance, pas une classe : serializers.CurrentUserDefault() comme indiqué dans la documentation

La valeur par défaut doit être une instance, pas une classe : serializers.CurrentUserDefault() comme indiqué dans la documentation

ça a résolu le problème

La valeur par défaut doit être une instance, pas une classe : serializers.CurrentUserDefault() comme indiqué dans la documentation

Merci, vous m'avez aidé à résoudre ce problème

Cette page vous a été utile?
0 / 5 - 0 notes