2011-11-05 31 views
1

嗨#1人,Django的:model.save()是不節能,但沒有錯誤味精

我試圖寫在Django,我自己接觸的形式,用戶可以給我寫郵件,消息會通過電子郵件發送並保存在數據庫中進行跟蹤。

但不知何故,model.save()不會保存任何東西。當我使用管理員檢查條目時,聯繫人表格爲空。我也沒有收到任何錯誤消息。

該消息的發送尚未完全實施。

爲了測試代碼,我在if/else分支中設置了一些狀態消息,但是我沒有得到任何聲明 - 因此代碼似乎被忽略了。但我不明白爲什麼?有什麼建議麼?

我不知道我是否正確地在views.py和forms.py之間傳遞請求變量。這可能是問題嗎?

謝謝您的建議。

models.py

from django.db import models 
from django.utils.translation import ugettext_lazy as _ 
from django.contrib.auth.models import User 
from django.conf import settings 
from django.core.urlresolvers import reverse 
from django.core.mail import send_mail 

import datetime, random 

class Contact(models.Model): 
""" 
Contact class is the model for user messages. 
Every message will be sent. 
""" 
CATEGORIES = (
     ('Suggestion', 'I have a suggestion'), 
     ('Feedback', 'General feedback'), 
     ('Complaint', 'You should improve ...'), 
     # ('', ''), 
     ) 

category = models.CharField(_('Message Category'), 
          max_length=10, 
          choices=CATEGORIES) 

subject = models.CharField(_('Message Subject'), 
          max_length=255,) 

sender = models.EmailField(_('Email Address'),) 

message = models.TextField(_('Message Box'),) 

# date and ansbwered are not visible to the user 
timeOfMessage = models.DateTimeField(_('Time of sending'), blank=True, null=True) 

answered = models.BooleanField(_('Answered?'), 
           default=False,) 

def __unicode__(self): 
    return '%s' % self.sender 

def send_and_save(self): 

    subject_new = ':'.join(self.category, self.subject) 

    send_mail(subject_new, 
       message, 
       sender, 
       '[email protected]_domain_address.com') 
    return True 

forms.py

from django.forms import ModelForm 
from django.utils.translation import ugettext_lazy as _ 
from contact.models import Contact 
import datetime 

class ContactForm(ModelForm): 
    class Meta: 
     model = Contact 
     exclude = ('answered', 'timeOfMessage') 

    def save_and_email(request): 
     if request.method == 'POST': 
      form = self(request.POST) 
      if form.is_valid(): 
      # contact.cleaned_data() 
       contact = form.save(commit=False) 
       contact.timeOfMessage = datetime.now() 
       contact.answered = False 
       contact.save() 
       print "was here" 
       return True 
      else: 
       print "Saving Failed" 
     else: 
      print "POST failed" 
     return False 

views.py

from django.views.generic.simple import direct_to_template 
from django.shortcuts import redirect, get_object_or_404, render_to_response 
from django.utils.translation import ugettext as _ 
from django.http import HttpResponseForbidden, Http404, HttpResponseRedirect, HttpResponse 
from django.template import RequestContext 
from django.core.mail import BadHeaderError 
from contact.forms import ContactForm 

def contact(request): 
    if request.method == 'POST': 
     try: 
      contactform = ContactForm() 
      contactform.save_and_email 
     except BadHeaderError: 
      return HttpResponse(_('Invalid header found.')) 
     return HttpResponseRedirect('/contact/thankyou/') 

    return render_to_response('contact/contact.html', {'form': ContactForm()}, 
     RequestContext(request)) 

回答

3

我在這裏看到兩件事情。在視圖中,該方法未被調用。該方法需要調用()。

然後save_and_email方法需要一些更正。首先需要自我論證,或將其轉換爲。 我的建議如下。

def save_and_email(self): 
    if self.is_valid(): 
     contact = self.save(commit=False) 
     contact.timeOfMessage = datetime.now() 
     contact.answered = False 
     contact.save() 
     return True 
    else: 
     return False 

和視圖:

def contact(request): 
    if request.method == 'POST': 
      contactform = ContactForm(request.POST) 
      if contactform.save_and_email(): 
       return HttpResponseRedirect('/contact/thankyou/') 

    return render_to_response('contact/contact.html', {'form': ContactForm()}, 
     RequestContext(request)) 
+0

謝謝你的回覆! – neurix

相關問題