Как переопределить сообщения об ошибках ArrayField по умолчанию в шаблоне? - PullRequest
5 голосов
/ 15 апреля 2019

Я пытаюсь изменить сообщение об ошибке по умолчанию, которое Django генерирует для ArrayField (в частности, сообщение об ошибке слишком много элементов введено)

Если пользователь вводит слишком много элементов в мой ArrayField, в шаблоне генерируется следующее сообщение:

Список содержит 4 элемента, он должен содержать не более 3.

Я хочу изменить это сообщение на

Вы не можете иметь более 3 тем.

Я пытался добавить следующие error_messages в свой мета-класс forms.py TopicForm Meta, но безуспешно

    error_messages = {
        'topic': {
            'invalid': ("You can't have more than 3 topics."),
        },

Вот мой файл models.py

from django.contrib.postgres.fields import ArrayField
from django.db import models

class Topic(models.Model)
    topic = ArrayField(models.CharField(max_length=20), size=3, blank=True,    null=True)

и мои forms.py

from django import forms
from .models import Topic

class TopicForm(forms.ModelForm):
    class Meta:
        model = Topic

        fields = ['topic']

Будет ли что-то сделать для этого! Спасибо!

1 Ответ

1 голос
/ 18 апреля 2019

ArrayField имеет несколько «кодов ошибок» для работы с различными типами пользовательских вводов.

«Код» ошибки для массива, перенаселенного элементами, равен max_length.

Вот переписанный код с отсутствующим фрагментом:)

error_messages = {
    'topic': {
        'max_length': ("You can't have more than 3 topics."),
     },

Кстати, вы также можете настроить сообщение об ошибке item_invalid для случаев, когда пользователи пытаются отправить неполные данные.

Например, попытка отправить string1,string2, (см. Дополнительную запятую?) Вызовет:

Элемент 3 в массиве не проверен

Вы можетенастроить сообщение item_invalid, добавив:

error_messages = {
        'topic': {
            'max_length': ("You can't have more than 3 topics."),
            'item_invalid': ("Your customized message"),
         },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...