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