2017-09-08 37 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) 

如果你想添加到數據庫,你不能使用一個實例。一個實例只能用於更新的數據庫。

如果您在獲取表單以保存到數據庫時遇到問題,那麼可能是因爲您現在還無法調用實例。

相關問題