Как переопределить сообщения об ошибках arrayField по умолчанию в шаблоне?

#python #django #postgresql

#python #django #postgresql

Вопрос:

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

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

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

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

У вас не может быть более 3 тем.

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

     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. Так он продолжает отображаться List contains 4 items, it should contain no more than 3. даже с пользовательским сообщением об ошибке?

2. Да, я добавил пользовательское сообщение об ошибке в мету класса, и оно по-прежнему отображает сообщение об ошибке по умолчанию

3. Очень странно. И если вы попытаетесь добавить пользовательское сообщение об ошибке для другого поля модели, скажем CharField , это сработает?

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

Ответ №1:

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

Ошибка ‘code’ для массива, который перенаселен элементами 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"),
         },