Django REPOS Cadre sérialiseur champ requis=false
à partir de la documentation:
read_only
Activez cette option pour vous assurer que le champ est utilisé lors de la sérialisation d'une représentation, mais il n'est pas utilisé lors de la mise à jour d'une instance lors de la désérialisation.Par défaut à False
nécessaire
Normalement, une erreur est levée si un champ n'est pas fourni lors de la désérialisation. La valeur false si ce champ n'est pas tenu d'être présent lors de la désérialisation.Par défaut à True.
J'ai donc un modèle qui a un champ qui n'est pas nullable mais je veux qu'il soit peuplé de la pre_save méthode, donc j'ai mis le champ de required=False
dans sérialiseur, mais ne semble pas fonctionner. Je suis encore en train d'erreur lors de la sauvegarde de l'enregistrement.
class FavoriteListSerializer(serializers.ModelSerializer):
owner = serializers.IntegerField(required=False)
class Meta:
model = models.FavoriteList
Mise à jour:
J'ai ajouté serializer_class = serializers.FavoriteListSerializer
à la ViewSet, maintenant, au lieu de se This field is required
, qui, je pense, a passé la validation, mais ensuite je suis This field cannot be null.
j'ai vérifié les pre_save méthode n'est pas en cours d'exécution, des idées?
Vous devez vous connecter pour publier un commentaire.
Ouais, je suis tombé sur cette question à un certain point. Vous devez également mettre à jour la validation des exclusions.
get_validation_exclusions()
méthode? Il remplace l'existant validations sur le modèle.ModelSerializer
's la mise en œuvre attrape la liste de toutes les sérialiseur champs qui sont répertoriés dans le sérialiseur, mais ajoute de retour dans un modèle de champs qui ne sont pas en lecture seule ou d'une autre ModelSerializer. Donc, vous devez l'aider à sortir en supprimant les champs de votre point de vue code va contribuer.Dans le cas où quelqu'un les terres ici avec un problème similaire, de payer l'attention sur les attributs suivants avec
required
:allow_blank:
allow_null:
requis:
J'ai été zigzaguant à comprendre pourquoi j'ai été faire une erreur de validation avec
required=False
où j'avais manqué laallow_null
attribut.En retard à ce fil. Ce problème a été corrigé dans django-repos-cadre 2.3.13. Voici le lien de la PR.
Je suppose que la méthode .get_validation_exclusions() est maintenant supprimé. Je n'ai pas trouvé dans ModelSerializer doc et il ne s'est pas exécuté après le remplacer (djangorestframework==3.8.2). Et je ne suis pas le seul confronté à ce problème.
Ma solution est simplement d'ajouter de la valeur par défaut pour le champ qui je veux être non-obligatoire. Elle devait être fine spécialement pour les situations avec pre_save:
Vous devez également garder à l'esprit que l'utilisation de drf sérialiseurs avec pre_save signaux peut provoquer implicite comportements (je n'ai pas vérifié, mais il me semble logique):
pre_save
est appelé sur la pré objet save (incroyable) qui (probablement) signifie après sérialiseur de validation.extra_kwargs
l'option de ces jours, par exemple.:extra_kwargs = { 'owner': {'required': False} }
required=False
, ou vous êtes en train de dire que l'utilisation deextra_kwargs
est différente de transmettre explicitement les champs définis par l'? Ce serait bizarre.