2013-10-16 48 views
2

我創建了一個模型表單,然後在每個頁面上都包含表單的情況下將其呈現在context processor中。表單提交後,應重新指向「謝謝」頁面。但它似乎只是重新加載頁面並刪除表單。通過URL在頁面上呈現時,我已經全部工作了。由於將函數移到我的上下文處理器,它不會正確重定向。Django模型表單沒有正確提交

它還保存在管理中提供給模型的信息。所以我猜測這是重定向的問題。

這裏是我的背景處理器:

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 

回答

1

上下文處理器應該總是返回一本字典,它不應該返回一個http響應。

一種選擇是讓您的聯繫表單發佈到不同的視圖。您可以通過更改模板中表單的action屬性來完成此操作。

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

你的聯繫人視圖和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} 
+0

沒有現在聽起來真的很愚蠢,我將如何改變它所以它發佈到不同的觀點? – JDavies

+0

這不是一個愚蠢的問題,我擴大了我的答案。 – Alasdair

+0

謝謝。我會盡快嘗試。 :) – JDavies