2017-03-08 4 views
0

私が検証したいフィールドがあるとしましょう。私は通常、私が使用することを知っている分野のためにこれについてこのように行くだろう。フィールドをvalidate(self)でvalidated(validated_dataにアクセスするため)としてマークする方法はありますか?

def validate_number(self, value): 
    if value == 7: 
    raise serializers.ValidationError('7 is bad!') 
    if value == 5: 
    return None # I want 5 to come back as None 
    return value 

私はこれと同じ動作を達成する方法、のは私が検証に持っていると私は検証()でこれらのフィールドを通過フィールドをわからないとしましょうか?

def validate(self, data): 
    if data['number'] == 7: 
    raise serializers.ValidationError('7 is bad!') 
    if data['number'] == 5: 
    data['number'] = None 
    return data 

.create/.updateメソッドでvalidated_dataとしてアクセスできますか?

+0

[フォームとフィールドの検証に関するdjangoドキュメント](https://docs.djangoproject.com/en/1.10/ref/forms/validation/#form-and-field-validation)から、2番目の箇条書き、 "validate()メソッドは何も返さず、値を変更しないでください。"あなたの答えは 'validate()'のようには見えません。より詳細な情報を提供することで、別の解決策を呼び起こすことができる。 – jamjar

+0

DRFシリアライザの検証については、動作するはずです。 [docs](http://www.django-rest-framework.org/api-guide/serializers/#object-level-validation)は、データを変更してはならないとは言いません。私が正しく思い出した場合は、シリアライザに渡された他のカスタム値から[hiddenfield](http://www.django-rest-framework.org/api-guide/fields/#hiddenfield)を構築するためにそれを使用し、さらに一部を削除しました値。 –

答えて

0

あなたは辞書でValidationErrorを上げる必要があります。

 raise serializers.ValidationError({'number': '7 is bad!'}) 

その後、検証の戻り値は、一度is_valid()Trueであるあなたがアクセスすることができますvalidated_dataとして渡されます。

+0

おっと、そうです。私はそれをタイプすることを意味しました。私が尋ねようとしているのは、きれいにされた値を作成/更新機能に適切に渡す方法です。言い換えれば、フィールドIを有効なフィールドとしてマークする方法。 –

+0

あなたの質問についてはわかりませんが、回答を編集しました。 – Linovia

+0

生データを検証する戻り値+私が行った編集はありませんか? validated_dataに編集するフィールドだけを持つ方法はありますか?特定のフィールドが無効で、有効とマークしたくない場合はどうすればよいですか? –

関連する問題