Как правильно использовать сообщения проверки в моделях Django

#django #django-validation

#django #django-проверка

Вопрос:

В моем приложении Django я использую PositiveSmallIntegerField в одной из моих моделей, в которой минимальное значение для поля указано как в:

 trc_frequency = models.PositiveSmallIntegerField(default=1, validators=[MinValueValidator(1)], ...)
  

Теперь, когда в форму вводится значение меньше 1 (ноль или отрицательное значение), возникает сообщение об ошибке, выдаваемое системой:

Убедитесь, что это значение больше или равно 0.

Принимая во внимание, что, поскольку минимальное значение, определенное для поля, равно «1» (единица), я бы предпочел, чтобы сообщение информировало пользователя о том, что минимально допустимое значение для поля равно 1 (единице),

в результате:

Убедитесь, что это значение больше или равно 1.

Что я пробовал до сих пор:

 trc_frequency = models.PositiveSmallIntegerField(default=1, validators=[MinValueValidator(1, _('Must ensure this value is greater than or equal to %(limit_value)s.'))],...)
  

Но все равно получаем минимальное значение, указанное в сообщении об ошибке как 1 (ноль). Что еще более удивительно, текст сообщения также не изменяется с Убедитесь, что это значение равно … для Необходимо убедиться, что это значение равно ... Почему?

Где я ошибаюсь.

Редактировать

forms.py

 class CreateTrcFreqForm(forms.ModelForm):
    class Meta:
        model = TrcFrequency
        fields = ('aud_freq_id', 'short_text', 'trc_frequency')

        widgets = {
            'freq_id': forms.TextInput(attrs={'style': 'width:40px; text-align:left'}),
            'short_text': forms.TextInput(attrs={'style': 'width:300px; text-align:left'}),
            'trc_frequency': forms.TextInput(attrs={'style': 'width:40px; text-align:right'}),
            }

##        error_messages = {
##            'trc_frequency': {
##                'min_value': _('Frequency value must be >= 1') # %(limit_value)s')
##            }
##        }
  

error_messages Сегмент был закомментирован для проверки проверки в models.py само по себе. Но даже при проверке формы %(limit_value)s') здесь я получаю «0 (ноль)», а НЕ 1 (единицу). Причина, по которой вы можете видеть жестко закодированное значение «…должно быть >= 1′)».

Комментарии:

1. Какую версию Django вы используете? Я только что попробовал это и не могу повторить. Редактировать: На самом деле, можете ли вы добавить код своей формы, я думаю, в этом проблема.

2. Использование 2.0. Форма простая ModelForm .

3. Я не смог воспроизвести это. Пробовал с 2.0 / 3.0. В конце концов, вы можете добавить валидаторы в саму форму, возможно, django неправильно получает валидаторы модели. Я думаю, что в коде есть еще кое-что.

4. Добавлен код формы (с некоторыми пояснениями ).

5. Я не могу объяснить это поведение, возможно, попробуйте обновить сам Django.