2017-09-08 1 views
0

J'ai été bloqué sur ce problème pendant un bon moment - le formulaire est capable de soumettre mais ne sauvegardera pas dans la base de données. J'ai même envoyé un e-mail à travers le formulaire, mais cela ne sauvera pas. Je fais un CRM et ai une application de contact, de communication, et d'email. Cette vue a jusqu'à présent trois formes, une pour chaque modèle. Le formulaire de contact est en mesure d'enregistrer dans la base de données. Les deux autres sont capables de soumettre mais ne sauveront pas. Les deux formulaires qui ne sont pas sauvegardés peuvent tous deux être redirigés vers le détail de contact actualisé avec leur instance et les données encore disponibles sur le formulaire. Donc, il doit être stocké correctement, ne pas enregistrer. Je ne suis pas sûr de ce qui me manque. Faites-moi savoir si vous avez besoin de moi pour ajouter d'autres fichiers.django -formulaire envoie des informations mais n'enregistre pas dans la base de données

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

pourriez-vous mettre le fichier des modèles pour la communication s'il vous plaît? – Bestasttung

+0

vient d'ajouter le fichier des modèles, merci. Normalement je n'aurais pas les nulls et les blancs pour la clé étrangère mais je les ai ajouté pour m'assurer que l'erreur n'était pas dans le traitement correct de la compagnie et du contact. –

+0

Il semble que l'action manque à la commaille? – Jonathan

Répondre

0

Compris la réponse et posterai ici au cas où quelqu'un viendrait ici avec une question similaire.

La raison pour laquelle ma forme ne sauvait pas à la base de données est parce que j'utilisais une instance pour la forme et en cherchant à ajouter à la db:

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

Si vous voulez ajouter à la base de données, vous ne pouvez pas utiliser une instance. Une instance ne peut être utilisée que pour mettre à jour la base de données.

Si vous ne parvenez pas à enregistrer un formulaire dans la base de données, il se peut que vous appeliez une instance alors que vous ne pouvez pas encore le faire.