Я получаю сообщение «Это поле обязательно». ошибка при загрузке веб-страницы при использовании модельной формы Django

#python #html #django #django-views #django-forms

#python #HTML #django #django-просмотры #django-forms

Вопрос:

Я создал модель с именем Annoucement в моем models.py файл, а также форма для него в моем forms.py досье. Затем я создал для него простое представление create в моем my views.py и сделал его отображаемым на интерфейсе, используя пакет django-crispy-forms, но каждый раз, когда я загружаю веб-сайт, граница поля становится красной, показывая, что произошла ошибка. Я попытался проверить, в чем может быть ошибка, но мне не повезло.

Это изображение, иллюстрирующее проблему

models.py

 class Announcement_by_dean(models.Model):
    student_id = models.ManyToManyField(add_students_by_manager)
    message = models.TextField()
    sent_date = models.DateField(default=datetime.now(), blank=True)
    updated_date = models.DateField(auto_now=True, blank=True)

    def __str__(self):
        return "message sent on "  str(self.sent_date)
 

forms.py

 class Annoucement_form(ModelForm):
    class Meta:
        model = Announcement_by_dean
        fields = ['student_id', 'message']
 

views.py

 def dean_page(request):

    annoucement_list = Announcement_by_dean.objects.all()

    if request.method == 'POST':
        form = Annoucement_form(request.POST)
        if form.is_valid():
            form.save()
            messages.success(request, _("Message Sent Successfully!!!"))
            return redirect('dean_page')
        else:
            messages.error(request, _("Message Not Sent, Something is Wrong!!!"))
    else:
        form = Annoucement_form()
        messages.error(request, _("Invalid Method!!!"))

        context = {"form":form, "annoucement_list":annoucement_list}
        return render(request, "dean_page.html", context)
 

dean_page.html

 <!-- Send Announcement -->
<div class="tab-pane fade show" id="nav-announcement" role="tabpanel" aria-labelledby="nav-announcement-tab">
  <div class="container mt-4 p-3">
    <form action="{% url 'dean_page' %}" method="POST"  enctype="multipart/form-data">
      {% csrf_token %}
      {{form|crispy}}
      <button type="submit" class="btn btn-success btn-sm">Submit</button>
    </form>        
  </div>
</div>
 

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

1. установите blank=True в вашем текстовом поле, чтобы оно могло принимать пустые входные данные.

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

3. Я разобрался с проблемой, проверьте ответ

Ответ №1:

Я смог решить проблему, я понял, что проблема заключалась в отступе моего контекста и возврате рендеринга.

views.py

 def dean_page(request):

    annoucement_list = Announcement_by_dean.objects.all().order_by('-id')

    if request.method == 'POST':
        form = Annoucement_form(request.POST)
        if form.is_valid():
            form.save()
            messages.success(request, _("Message Sent Successfully!!!"))
            return redirect('dean_page')
        else:
            messages.error(request, _("Message Not Sent, Something is Wrong!!!"))
    else:
        form = Annoucement_form()

        context = {"annoucement_list":annoucement_list, "form":form}
        return render(request, "dean_page.html", context)
to 

def dean_page(request):

    annoucement_list = Announcement_by_dean.objects.all().order_by('-id')

    if request.method == 'POST':
        form = Annoucement_form(request.POST)
        if form.is_valid():
            form.save()
            messages.success(request, _("Message Sent Successfully!!!"))
            return redirect('dean_page')
        else:
            messages.error(request, _("Message Not Sent, Something is Wrong!!!"))
    else:
        form = Annoucement_form()

    context = {"annoucement_list":annoucement_list, "form":form}
    return render(request, "dean_page.html", context)