gpt4 book ai didi

python - Django 模型表单未正确提交

转载 作者:太空宇宙 更新时间:2023-11-04 06:10:00 25 4
gpt4 key购买 nike

我创建了一个模型表单,然后在 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,
}

表单.py

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

模型.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 响应。

一种选择是将您的联系表张贴到不同的 View 。您可以通过更改模板中表单的 action 属性来实现。

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

您的联系人 View 和 url 模式看起来像这样:

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}

关于python - Django 模型表单未正确提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19409994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com