Поднять ошибку формы ниже поля ввода, если в Django введены неверные данные - PullRequest
1 голос
/ 19 октября 2019

Я использую pre_save, чтобы вызвать ошибку, если при вводе данных какое-либо условие не выполняется. Но когда я использую raise ValidationError(). Это показывает мне ошибку на следующей странице, как это. enter image description here

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

enter image description here

Ошибка должна отображаться на самой странице с неверными данными,Как я могу это сделать. Это то, что я пробовал.

@receiver(pre_save, sender=Works_in)
def check_dept_has_manager(sender, instance, **kwargs):
    print(instance.emp_name, instance.dept_name)

    if str(instance.emp_name) == "BB":
        raise ValidationError("Manager already assigned to this department")

Как-то так ... В красном цвете текста. enter image description here

Ответы [ 2 ]

2 голосов
/ 19 октября 2019

Для этого следует использовать метод clean.

def clean(self):
    if str(self.emp_name) == "BB":
        raise ValidationError('Manager already assigned to this department')

Этот метод вызывается перед сохранением объекта. Метод clean () в подклассе Field отвечает за запуск to_python (), validate () и run_validators () в правильном порядке и распространение их ошибок.

1 голос
/ 19 октября 2019

Вы можете сделать соответствующую валидацию в modelField как ссылку на функцию в аргументе validators

def check_dept_has_manager(value):
     if value == "BB":
        raise ValidationError("Manager already assigned to this department")
     else:
        return value

В вашей модели

class Works_in(models.Model):
      emp_name = models.CharField(max_length=2,validators=[check_dept_has_manager])

Если вы нажмете save, она будет показана наполе

...