Django DRF отображает verbose_name поля в сообщении об ошибке - PullRequest
1 голос
/ 26 марта 2019

Если проверка поля модели не удалась, я бы хотел, чтобы DRF вернул поле verbose_name в сообщении об ошибке.

пример:

models.py:

class MyClass(models.Model):
    myfield = model.CharField(max_length=20,\
                              verbose_name="This is the field",\
                              default="blabla")

serialiers.py:

class MyClassSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyClass
        fields = ('myfield',)

Если данные POSTED для этого поля содержат более 20 символов, полезная нагрузка ответа:

{"myfield":["the error message..........."]}

Чтобы создать более дружеское сообщение для пользователей (..и легко управлять ошибками :-)), я хотел бы использовать verbose_name поля модели, поэтому полезная нагрузка ответа будет:

{"This is the field":["the error message..........."]}

У вас есть идеи?Спасибо!

1 Ответ

1 голос
/ 26 марта 2019

Я не думаю, что есть простой способ сделать это.Самый простой способ - переопределить свойство errors сериализатора и изменить ключи ошибок с подробным именем.

class TestSerializer(serializers.ModelSerializer):
    class Meta:
        model = ...
        fields = ('field1', ...)

    @property
    def errors(self):
        # get errors
        errors = super().errors
        verbose_errors = {}

        # fields = { field.name: field.verbose_name } for each field in model
        fields = {field.name: field.verbose_name for field in
                   self.Meta.model._meta.get_fields() if hasattr(field, 'verbose_name')}

        # iterate over errors and replace error key with verbose name if exists
        for field_name, error in errors.items():
            if field_name in fields:
                verbose_errors[str(fields[field_name])] = error
            else:
                verbose_errors[field_name] = error
        return verbose_errors
...