Skip to main content
 首页 » 编程设计

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

2025年05月04日25zhengyun_ustc

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