почему я получаю «Это поле обязательно». при загрузке страницы

#python #django #django-models #django-forms #django-crispy-forms

#питон #джанго #django-модели #django-формы #django-crispy-forms

Вопрос:

У меня есть форма в моем шаблоне, для реализации которой я использовал django-crispy-forms. У меня есть models.py , а затем создал forms.py а затем использовал его в своей views.py . Я не знаю, почему у меня все время появляется надпись «Это поле обязательно». всякий раз, когда я загружаю страницу. У меня есть некоторые предчувствия, что это как-то связано с views.py ты. Я был бы рад, если бы смог получить какие-то решения. Спасибо

Это изображение страницы. введите описание изображения здесь

models.py

 class add_courses(models.Model):
    Course_Name = models.CharField(max_length=200)
    Manager_Name = models.ForeignKey(Manager_login_information, on_delete=models.CASCADE)

    choices = (
            ("online", "online"),
            ("in person", "in person")
        )

    description = models.TextField(default='')
    syllabus = models.TextField(default='')
    classroom = models.CharField(choices=choices, default='in person', max_length=12)
    location = models.CharField(max_length=40, default='')
    course_code = models.CharField(max_length=14, default='')
    student = models.ManyToManyField(add_students_by_manager)
    teacher = models.ManyToManyField(add_teacher_by_manager)
    schedule = models.ForeignKey(course_schedule, on_delete=models.CASCADE)

    def __str__(self):
        return self.Course_Name
 

views.py

 def manager_page(request):
    if request.method=="POST":
        manager_id = request.POST.get('manager_id')
        manager_name = request.POST.get('manager_name')

        form3 = AddCourses()
        if request.method == "POST":
            form3 = AddCourses(request.POST)
            if form3.is_valid():
                form3.save()
                return redirect("/")

        # get_course_details = add_course.objects.all()

        courses = add_courses.objects.all().order_by('-id')

        get_supervisor_man=manager_supervisor.objects.filter(manager_id=manager_id)

        Manager_login_information_get1 = Manager_login_information.objects.get(manager_ID=manager_id)
        # print(Manager_login_information_get1)

        manager_usid = Manager_login_information_get1.manager_ID
        manager_usname = Manager_login_information_get1.manager_Name

        context9 = {'manager_id':manager_id, 'manager_name':manager_name, 'form1':form1, 'form2':form2, 'form3':form3, 'courses':courses, 'Manager_login_information_get1':Manager_login_information_get1}
        return render(request, 'manager_page.html', context9)
    else:
        return redirect('/')
 

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

1. Можете ли вы также опубликовать свою модель здесь? решением может быть добавление «blank = True» в вашу модель: docs.djangoproject.com/en/3.1/ref/models/fields/#blank

2. Проверьте вопрос еще раз, я его добавил.

Ответ №1:

В вашей модели вы должны добавить blank=True, чтобы разрешить пустые поля. (по умолчанию равно False)

Таким образом, ваша модель будет выглядеть примерно так:

 class add_courses(models.Model):
    Course_Name = models.CharField(max_length=200, blank=True)
    ...
    ...
 

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

1. Спасибо. это сработало для всех полей, кроме поля student и teacher, которые имеют множество связей manytomanyfield.

2. Нет проблем! вы снова запустили миграцию? я думал, что это тоже сработает с полями m2m.

3. кроме того, как я могу предварительно заполнить поле manager текущей информацией о менеджере, поле manager является внешним ключом.

4. Чтобы получить текущую информацию о менеджере / пользователе, вы должны создать набор запросов внутри вашего представления. примените это к ‘context9’, чтобы получить к нему доступ из шаблона, где вы можете перебирать его в цикле.

5. Это приводит к тому, что пользователь может заполнить поле как пустое, не проверяя входные данные по мере необходимости.