Отображать ошибки проверки в том же стиле, что и сообщения об ошибках - PullRequest
0 голосов
/ 01 мая 2020

Я использую хрустящие формы, чтобы мои формы выглядели хорошо, и добавил следующую проверку:

forms.py

class Meta:
    widgets = {
            'dob': DatePickerInput(
                options={
                    "format": "MM/DD/YYYY",
                    "showClose": False,
                    "showClear": False,
                    "showTodayButton": False,
                }
            ),
    }

def clean(self):
        data = self.cleaned_data
        born = data.get('dob')
        today = date.today()
        age = (today.year - born.year - ((today.month, today.day) < (born.month, born.day)))

        if age < 14:
            msg = ("Sorry, you must be atleast 14 years old")
            self.add_error('dob', msg)

        if age > 110:
            msg = ("You entered a date of birth outside of the accepted range. Please try again.")
            self.add_error('dob', msg)

        return data

models.py

dob = models.DateTimeField('Date of birth (mm/dd/yyyy)', null=True, default=now)

Моя проблема заключается в том, что это сообщение об ошибке отображается в верхней части страницы как сообщение fla sh, в то время как другие сообщения (которые я не установил, но встроенные в хрустящие, например, когда пользователь оставляет обязательное поле пустым), отображается как всплывающее окно сообщения под полем ошибки, связанные с.

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

Изображение - (https://imgur.com/VQHMKUp)

Спасибо.

1 Ответ

1 голос
/ 01 мая 2020

Если вы переопределяете чистый метод, тогда вы можете использовать add_error () :

def clean(self):
    data = self.cleaned_data
    age = data.get("age")

    if age < 14:
        msg = "Sorry, you must be atleast 14 years old to study with IPC IELTS."
        self.add_error('age', msg)

    if age > 110:
        msg = "You entered a date of birth outside of the accepted range. Please try again."
        self.add_error('age', msg)

    return data

Вы также можете поставить проверку в вашей модели или в форме:

from django.core.validators import MinValueValidator,MaxValueValidator
from django.utils.translation import ugettext_lazy as _

class YourModel(models.Model):
    age = models.DecimalField(..., validators=[
        MinValueValidator(14, message=_("Sorry, you must be atleast 
            14 years old to study with IPC IELTS.")),
        MaxValueValidator(110, message=_("You entered a date of birth outside of the 
            accepted range. Please try again."))
    ])

Так что вам не нужно стилизовать его вручную для этого поля.

...