2011-11-05 93 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

相关问题