#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"),
},