58

ドキュメントから:

read_only これを True に設定すると、表現をシリアル化するときにフィールドが使用されますが、逆シリアル化中にインスタンスを更新するときには使用されません。

デフォルトは False

必須 通常、逆シリアル化中にフィールドが提供されない場合、エラーが発生します。逆シリアル化中にこのフィールドが存在する必要がない場合は、false に設定します。

デフォルトは真です。

したがって、null 不可のフィールドを持つモデルがありますが、pre_save メソッドで入力したいので、シリアライザーでフィールドを設定しましたrequired=Falseが、機能していないようです。レコードを保存するときにまだエラーが発生します。

class FavoriteListSerializer(serializers.ModelSerializer):
    owner = serializers.IntegerField(required=False)
    class Meta:
        model = models.FavoriteList

更新: serializer_class = serializers.FavoriteListSerializerget の代わりに ViewSet に追加しましたThis field is required。これは検証を通過したと思いますがThis field cannot be null.、 pre_save メソッドが実行されていないことを確認しました。何かアイデアはありますか?

4

6 に答える 6

56

ええ、私もある時点でこの問題に遭遇しました。検証の除外も更新する必要があります。

class FavoriteListSerializer(serializers.ModelSerializer):
    owner = serializers.IntegerField(required=False)
    class Meta:
        model = models.FavoriteList

    def get_validation_exclusions(self):
        exclusions = super(FavoriteListSerializer, self).get_validation_exclusions()
        return exclusions + ['owner']
于 2013-11-05T08:09:35.473 に答える
31

誰かが同様の問題でここにたどり着いた場合は、次の属性と一緒に注意してrequiredください。

allow_blank :

に設定されてTrueいる場合、空の文字列は有効な値と見なされます。

allow_null :

Noneをシリアライザ フィールドに渡すと、通常はエラーが発生します。

必須:

通常、逆シリアル化中にフィールドが提供されない場合、エラーが発生します。

属性required=Falseを見逃した場所で検証エラーが発生した理由を理解するのに苦労していました。allow_null

于 2016-12-15T19:40:29.217 に答える
2

設定しようとしているフィールドの 1 つに unique_together 制約がある場合は、シリアライザーのメタのようrequired=Falseに設定する必要がありますvalidators=[]

class FavoriteListSerializer(serializers.ModelSerializer):
    owner = serializers.IntegerField(required=False)
    class Meta:
        model = models.FavoriteList
        validators = []

これが元の答えです

于 2020-02-01T11:13:06.137 に答える