2017-09-08 1 views
0

양식을 제출할 수는 있지만 데이터베이스에 저장하지는 않습니다. 하나의 양식을 통해 이메일을 보냈지 만 저장되지는 ​​않습니다. 저는 CRM을 만들고 연락, 의사 소통 및 전자 메일 응용 프로그램을 보유하고 있습니다. 이보기에는 각 모델에 대해 하나씩, 지금까지 세 가지 형식이 있습니다. 문의 양식은 DB에 저장할 수 있습니다. 다른 두 사람은 제출할 수는 있지만 저장하지는 못합니다. 저장하지 않는 두 가지 양식은 모두 인스턴스의 새로 고침 된 연락처 세부 정보로 다시 리디렉션 될 수 있으며 양식에서 계속 사용할 수 있습니다. 따라서 저장하지 않고 제대로 저장해야합니다. 내가 뭘 놓쳤는 지 모르겠다. 다른 파일을 추가해야하는 경우 알려주십시오.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

방금 ​​모델 파일을 추가했습니다. 감사합니다. 나는 일반적으로 외래 키에 null과 공백이 없지만 오류를 회사와 연락처를 올바르게 처리하지 못하도록 추가했습니다. –

+0

commform에 작업이 누락 된 것 같습니다. – Jonathan

답변

0

답을 찾아내어 누군가가 비슷한 질문을하는 경우 여기에 게시 할 것입니다.

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

을 당신이를 추가 하려면 : 나는 폼의 인스턴스를 사용하고 DB에를 추가 을 추구했기 때문에

내 양식이 데이터베이스에 저장되지 않은 이유는 데이터베이스, 당신은 인스턴스를 사용할 수 없습니다. 인스턴스는 에만 데이터베이스을 업데이트하는 데 사용할 수 있습니다.

양식을 데이터베이스에 저장하는 데 문제가있는 경우, 단순히 인스턴스를 호출하는 중일 수 있습니다.

관련 문제