[英]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.