2017-09-08 75 views
0

我一直坚持这个问题的好 - 表单能够提交但不会保存到数据库。我甚至通过一个表单发送了一封电子邮件,但它不会保存。我正在制作一个CRM,并且有一个联系人,通信和电子邮件应用程序。迄今为止,这种观点有三种形式,每种模式都有一种形式。联系表格可以保存到数据库。另外两个能够提交但不能保存。两种不保存的表单都可以重定向到刷新的联系人详细信息,其实例和数据仍可在表单上找到。所以它必须正确储存,而不是储存。我不确定我错过了什么。让我知道你是否需要我添加其他文件。django - 表单提交的信息,但不会保存到数据库

views.py ----------

def contact_detail(request, contact_id): 
    contact = get_object_or_404(Contact, pk=contact_id) 

    if request.method == 'POST' and 'contact' in request.POST: 
     contactForm = ContactForm(request.POST, prefix='contact', instance=contact) 
     if contactForm.is_valid(): 
      contactForm.save() 
    else: 
     contactForm = ContactForm(prefix='contact', instance=contact) 

    if request.method == 'POST' and 'email' in request.POST: 
     contactForm = ContactForm(prefix='contact', instance=contact) 
     messageForm = MessageForm(request.POST, prefix='email', instance=contact) 
     if messageForm.is_valid(): 
      messageForm.save() 
      form_email = contact.contact_email 
      form_message = messageForm.cleaned_data.get("message") 
      subject = messageForm.cleaned_data.get("subject") 
      from_email = settings.EMAIL_HOST_USER 
      to_email = [from_email] 
      contact_message = "%s" % (
       form_message) 
      send_mail(subject, 
         contact_message, 
         from_email, 
         to_email, 
         fail_silently=True) 
    else: 
     messageForm = MessageForm(prefix='email', instance=contact) 

    company = Company.objects.filter(contact=contact_id) 
    communications = Communication.objects.filter(contact=contact_id).order_by('-comm_date') 

    if request.method == 'POST' and 'comm' in request.POST: 
     contactForm = ContactForm(prefix='contact', instance=contact) 
     messageForm = MessageForm(prefix='email', instance=contact) 
     commForm = CommForm(request.POST, prefix='comm', instance=contact) 
     if commForm.is_valid(): 
      commForm.save() 
      redirect_url = reverse(
       'contacts:contact_detail', 
       args=(contact_id,) 
      ) 
      return HttpResponseRedirect(redirect_url) 

    else: 
     commForm = CommForm(prefix='comm') 

    context = { 
     'contact': contact, 
     'contactForm': contactForm, 
     'company': company, 
     'messageForm': messageForm, 
     'communications': communications, 
     'commForm': commForm} 
    return render(request, 'contacts/contact_detail.html', context) 

forms.py ----------

from django import forms 
from communications.models import Communication 
from django.forms import ModelForm 


class CommForm(ModelForm): 
    class Meta: 
     model = Communication 
     fields = '__all__' 

comm_form.html --- -------

<form action='' method='post'>{% csrf_token %} 
    {% for field in commForm %} 
     <div class='fieldWrapper'> 
     {% csrf_token %} 
     {{ field.errors }} 
     {{ field.label_tag }} {{ field }} 
     </div> 
    {% endfor %} 
    <p><input type='submit' name='comm' value='submit comm' /></p> 
</form> 

models.py ----------

from django.contrib.auth.models import User 

from companies.models import Company 
from contacts.models import Contact 

class Communication(models.Model): 
    company = models.ForeignKey(Company, null=True, blank=True) 
    contact = models.ForeignKey(Contact, null=True, blank=True) 
    owner = models.ForeignKey(User, blank=True) 
    comm = models.TextField() 
    comm_date = models.DateTimeField(auto_now_add=True, null=True, blank=True) 
+0

你可以把模型文件进行通信吗? – Bestasttung

+0

刚刚添加了模型文件,谢谢。我通常不会为外键拥有空值和空白,但我添加了它们以确保错误不在正确处理公司和联系人。 –

+0

它看起来像通信失踪的行动? – Jonathan

回答

0

找出答案,并会在这里发布,以防有​​人来到这里,提出类似的问题。

为什么我的状态并没有保存到数据库的原因是因为我使用形式的实例,并寻求添加的分贝:

commForm = CommForm(request.POST, prefix='comm', instance=contact) 

如果你想添加到数据库,你不能使用一个实例。一个实例只能用于更新的数据库。

如果您在获取表单以保存到数据库时遇到问题,那么可能是因为您现在还无法调用实例。

相关问题