2017-12-28 16 views
1

drf validatorと書いて、他のフィールドの値に基づいて必要なフィールドをマークします。たとえば :Django rest framework条件に必須のフィールド

def set_context(self, serializer_field): 
    print serializer_field.parent.initial_data 

が、「initial_data」:まず

class MySerializer(serializers.Serializer): 
    has_children = fields.BooleanField() 
    nb_childs = fields.IntegerField(min_value=1, validators=[RequiredIf(field='has_children', value=True)], required=False) 

私はclass based validatorは、このような方法で「has_children」の値を取得して、それを行うための方法だと信じていました設定されていません。どんな手掛かり?

答えて

2

は、オブジェクト・レベルの検証を行うために、基本的な外観here in the DRF documentation

を持って、あなたはシリアライザのvalidate(self, data)メソッドをオーバーライドする必要があり、dataパラメータの値を使用して検証を行います(これは検証するdictとして提供シリアライザの状態であります)何か問題があればValidationErrorを挙げてください。

raise ValidationError({'yourfield': ['Your message']}) 
+0

申し訳ありませんが、それは私が尋ね、私はバリを望んでいないです:あなたは、特定のフィールドにエラーが発生する必要がある場合は

は、あなたはValidationErrorコンストラクタにパラメータとして辞書を渡すことができます。 ValidationErrorはフィールドに関連付けられていないため、validateは無効になります。 – Fred

+0

'ValidationError'コンストラクタで辞書を渡すことで、フィールドレベルのエラーを発生させることができます:' raise ValidationError({'yourfield':['エラーメッセージ']}) ' –

+0

申し訳ありません。それは私のために働くはずです、ありがとう – Fred

関連する問題