2016-10-23 4 views
0

私のウェブサイト上で登録しているユーザーが私に固有のアドレス(市、街路、街路番号など)を与えていると、それはユニークではないとき、私はserializers.ValidationErrorを上げていた場合、私は検証しています:Django Rest Framework:non_field_errorsというカスタム名を設定するには?

class UserSerializer(serializers.ModelSerializer): 
    def validate(self, attrs): 
     city = attrs['city'] 
     street = attrs['street'] 
     street_number = attrs['street_number'] 
     apartment_number = attrs['apartment_number'] if 'apartment_number' in attrs else None 
     unique = check_address_unique(city, street, street_number, apartment_number) 
     if not unique: 
      raise serializers.ValidationError(_('Another user has already been registered under this address.')) 
     return attrs 

問題は、エラーが渡され、その下のフィールド名がこの標準non_field_errorsであるということである。

{"non_field_errors":["Another user has already been registered under this address."]}

私は何とかこのエラーにカスタム名を与えたいのですが、所望の出力は次のようになります。

{"address":["Another user has already been registered under this address."]}

これを実行する方法は?

あなたはこのようにそれを行うことができ、単一のValidationErrorをするために
+0

は、それはそれを行うための正しい方法だとは思わないでください。 「グローバル」検証機能で検証しているので、発生するエラーは特定のフィールドエラーではありません。私はまったく同じことをしていませんが、ある意味では、辞書やエラーのリストに 'self.errors'などのようなエラーを直接追加する方法があると思います(申し訳ありませんが、 )。 – makaveli

答えて

0

raise serializers.ValidationError({ 
    'address': _('Another user has already been registered under this address.') 
}) 

あなたは世界的にこの名前を上書きしたい場合は、NON_FIELD_ERRORS_KEY RESTフレームワークの設定を使用することができます。

+0

私は家に帰るときにこれを試してみます。しかし、私がそれをする前に、このコードをテストしましたか? –

+0

@SzwornyDziąchはい、私はシリアライザでこれを頻繁に使用します。 – dikamilo

+0

私はあなたを信じていますので、私はこの回答を受け入れます;) –

1

参考にあなたがあなたのValidationErrorを出力をカスタマイズするために必要なすべてを見つけるここthis

かもしれません。例えば

raise ValidationError(
    _('Invalid value: %(value)s'), 
    code='invalid', 
    params={'value': '42'}, 
) 
+0

これは実際に私が使用しているジャンゴレストフレームワークですので、これが私の状況に当てはまるかどうかはわかりませんが、 。 –

関連する問題