Django Rest Framework:如何通过non_field_errors设置自定义名称?

Mar*_* M. 1 django django-rest-framework

我正在验证在我的网站上注册的用户是否给我唯一的地址(城市,街道,街道号码等),如果该地址不是唯一的,那么我正在提出serializers.ValidationError

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
Run Code Online (Sandbox Code Playgroud)

问题是传递错误的字段名称是以下标准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."]}

如何做到这一点?

dik*_*ilo 5

对于单个ValidationError,您可以这样做:

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

如果要全局覆盖此名称,则可以使用NON_FIELD_ERRORS_KEYREST框架设置。

  • @arshbot `从 django.utils.translation 导入 ugettext_lazy as _` (2认同)