簡體   English   中英

Django模型表單未正確提交

[英]Django model form not submitting correctly

我創建了一個模型表單,然后將其呈現在context processor因為該表單包含在每個頁面中。 提交表單后,應將其重定向到“謝謝”頁面。 但是,似乎只是重新加載了頁面並刪除了表單。 通過URL在頁面上呈現時,所有這些工作正常。 由於將函數移至我的上下文處理器,因此無法正確重定向。

它還將在管理員中保存提供給模型的信息。 因此,我猜測這與重定向有關。

這是我的上下文處理器:

from django.conf import settings
from contact_enquiries import forms

from django.shortcuts import render
from django.http import HttpResponseRedirect


def contact(request):
    if request.method == 'POST':
        form = forms.ContactUsForm(request.POST)

        if form.is_valid():

            form.save()

        return HttpResponseRedirect('/thanks/')

    else:
        form = forms.ContactUsForm()

        return {
                  'contact_form' : form,
        }

forms.py

class ContactUsForm(ModelForm):
    class Meta:
        model = ContactUs
        fields = ['name', 'contact_number', 'email', 'enquiry']

models.py

class ContactUs(models.Model):
    name = models.CharField(max_length=200)
    contact_number = models.IntegerField(max_length=50)
    email = models.EmailField(max_length=300)
    enquiry = models.TextField()

    class Meta:
        verbose_name_plural = "Contact Us"


    def __unicode__(self):
        return self.name

上下文處理器應該始終返回字典,而不應該返回http響應。

一種選擇是使您的聯系表單發布到其他視圖。 您可以通過在模板中更改表單的action屬性來實現。

<form action="{% url 'contact' %}" method="post">

您的聯系視圖和網址格式如下所示:

url('^/contact/$', contact, name="contact"),

def contact(request):
    if request.method == 'POST':
        form = forms.ContactUsForm(request.POST)

        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/thanks/')

    else:
        form = forms.ContactUsForm()

    return render(request, "contact.html", {
              'contact_form' : form,
    })

然后,您的上下文處理器可以簡化為:

def contact(request):
    form = forms.ContactUsForm()
    return {'contact_form' : form}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM