Размещение ошибки валидации для редактируемого поля со списком

Я включил редактирование списка в одном из моих админов django, чтобы позволить пользователю обновлять минимальное и максимальное значение. Я установил валидацию, чтобы убедиться, что min не больше max. Проверка работает, как и ожидалось. Однако я не очень доволен тем, как отображается сообщение.

В настоящее время, как видно на скриншоте, сообщение об ошибке появляется прямо над полем, что нарушает выравнивание таблицы. Столбец с ошибкой становится шире остальных и даже не выделяется красным цветом.

enter image description here

Вместо этого я пытаюсь показать ошибку в верхней части страницы, как

Please correct the errors below.
Min value cannot be greater than max value
....

и просто выделите ошибочное поле красной рамкой.

как лучше всего этого добиться?

Я попытался переопределить функцию is_valid в своей CustomModelForm, но не могу добавить туда сообщения, так как у меня нет доступа к объекту request. Все, что я пытался передать объекту запроса, было тщетно.

class CustomModelForm(forms.ModelForm):
           
    class Meta:
        model = MyModel
        fields = '__all__' 
        
    def is_valid(self):
        if 'min_quantity' in self._errors:
            # messages.error(self.request, self._errors["min_quantity"])
            print("Handling a specific validation error for 'min'")
            del self._errors['min_quantity']
    
        super().is_valid()

После того, как я смогу установить сообщения django, какой шаблон я должен расширить, чтобы настроить подсветку ошибочного поля?

Если не это, то как еще можно отобразить ошибку, чтобы она была более удобной для глаз.

Вместо того чтобы пытаться управлять обработкой ошибок в методе is_valid() напрямую, рассмотрите возможность настройки проверки в методе clean() формы, где вы можете добавить свою проверку и обрабатывать ошибки более чисто.

Пример:

from django import forms
from django.core.exceptions import ValidationError

class CustomModelForm(forms.ModelForm):

    class Meta:
        model = MyModel
        fields = '__all__'

    def clean(self):
        cleaned_data = super().clean()
        min_value = cleaned_data.get('min_value')
        max_value = cleaned_data.get('max_value')

        if min_value is not None and max_value is not None:
            if min_value > max_value:
                self.add_error('min_value', 'Min value cannot be greater than max value.')
                self.add_error('max_value', 'Max value must be greater than min value.')

        return cleaned_data
Вернуться на верх