Django:model.save()未保存,但没有错误消息

Django:model.save()未保存,但没有错误消息,django,forms,model,save,Django,Forms,Model,Save,大家好 我正在尝试用Django编写我自己的联系表单,用户可以在这里向我发送消息,消息将通过电子邮件发送并保存在数据库中以便跟踪 但是不知怎的,model.save()不会保存任何内容。当我用Admin检查条目时,联系人表是空的。我也没有收到任何错误消息。 消息的发送尚未完全实现 为了测试代码,我在if/else分支中设置了一些状态消息,但是我没有得到任何语句-因此代码似乎被忽略了。但我不明白为什么?有什么建议吗? 我不确定是否在views.py和forms.py之间正确地传递了请求变量。这可能

大家好

我正在尝试用Django编写我自己的联系表单,用户可以在这里向我发送消息,消息将通过电子邮件发送并保存在数据库中以便跟踪

但是不知怎的,model.save()不会保存任何内容。当我用Admin检查条目时,联系人表是空的。我也没有收到任何错误消息。

消息的发送尚未完全实现

为了测试代码,我在if/else分支中设置了一些状态消息,但是我没有得到任何语句-因此代码似乎被忽略了。但我不明白为什么?有什么建议吗?

我不确定是否在views.py和forms.py之间正确地传递了请求变量。这可能是问题所在吗

谢谢你的建议

型号.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, 
              'info@future_domain_address.com')
    return True
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
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))
forms.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, 
              'info@future_domain_address.com')
    return True
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
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))
视图.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, 
              'info@future_domain_address.com')
    return True
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
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))

我在这里看到两件事。在视图上,不调用该方法。该方法需要调用()

然后save_和_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))