@albertalexandrov

Как переопределить дефолтное сообщение unique_together?

Всем привет!

Предположим, есть модель:

class RuleNode(models.Model):
    rule = ...
    node = ....
    field = ...

    class Meta:
        unique_together = [[rule, field], [node, field]]


Дефолтное сообщение при вставке дублирующихся значений будет выглядеть примерно следующим образом:

{
"non_field_errors": [
"The fields rule, field must make a unique set."
]
}


Как его можно переопределить? В сериализаторе не предлагать)

Спасибо
  • Вопрос задан
  • 354 просмотра
Пригласить эксперта
Ответы на вопрос 2
deepblack
@deepblack Куратор тега Django
https://docs.djangoproject.com/en/2.1/topics/forms...
from django.core.exceptions import NON_FIELD_ERRORS
from django.forms import ModelForm

class ArticleForm(ModelForm):
    class Meta:
        error_messages = {
            NON_FIELD_ERRORS: {
                'unique_together': "%(model_name)s's %(field_labels)s are not unique.",
            }
        }
Ответ написан
alternativshik
@alternativshik
Переопределить в модели метод unique_error_message, родной выглядит так, дальше, надеюсь, справитесь

def unique_error_message(self, model_class, unique_check):
        opts = model_class._meta

        params = {
            'model': self,
            'model_class': model_class,
            'model_name': capfirst(opts.verbose_name),
            'unique_check': unique_check,
        }

        # A unique field
        if len(unique_check) == 1:
            field = opts.get_field(unique_check[0])
            params['field_label'] = capfirst(field.verbose_name)
            return ValidationError(
                message=field.error_messages['unique'],
                code='unique',
                params=params,
            )

        # unique_together
        else:
            field_labels = [capfirst(opts.get_field(f).verbose_name) for f in unique_check]
            params['field_labels'] = get_text_list(field_labels, _('and'))
            return ValidationError(
                message=_("%(model_name)s with this %(field_labels)s already exists."),
                code='unique_together',
                params=params,
            )
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы