2017-09-16 1 views
0

J'ai deux formes à mon avis: BookingForm et ReviewForm. Je souhaite soumettre et traiter ces formulaires de manière indépendante dans mon template.html. J'ai ajouté le «booking' et 'review' dans la balise nom de mes formes template.htmlDjango, gestion de plusieurs formulaires. Formulaires référencés avant affectation

Pour le formulaire de réservation, je veux simplement rediriger, mais pour le ReviewForm je voudrais créer un enregistrement dans mon DB.

Voici mon views.py

if request.method == "POST": 
    if 'booking' in request.POST: 
     form = BookingForm(request.POST) 
     if form.is_valid(): 
      #process the form 
      return redirect() 
    elif 'review' in request.POST: 
     review_form = BookingForm(request.POST) 
     if review_form.is_valid(): 
      review_form.save() 
      return redirect() 
else: 
    form = BookingForm() 
    review_form = ReviewForm() 
return render(request, "template.html", context={"form": form,"review_form":review_form}) 

Cependant, pour une raison quelconque, je reçois l'erreur form et review_form sont référencées avant l'affectation. Une autre chose, puisque le modèle de révision doit être associé à un autre modèle (appelez-le élément). Je voudrais obtenir automatiquement les données de l'article et associer ma critique à l'article lorsque j'appelle le review_form.save(). Je pense quelque chose le long de review_form['item']=kwargs['pk'] (Je ne sais pas si cela va fonctionner). J'utilise une structure DetailView et la page a un paramètre de urls.py, associé à l'élément, stocké comme item_id=kwargs['pk'] à mon avis.

class Review(models.Model): 
    #other fields 
    item = models.ForeignKey(Item) 

class ReviewForm(forms.ModelForm): 
    class Meta: 
     model = Review 
     fields = ('title','star','photo','name','email','body') 

Répondre

1

Tout d'abord, l'ajout d'un attribut name à un formulaire ne fait rien. Cette valeur ne sera toujours pas envoyée à la vue. Ainsi, aucune de vos conditions n'est vraie sur POST, et les deux formulaire et booking_form ne sont pas définis.

La manière de procéder consiste à ajouter l'attribut au bouton submit. Cependant, cela posera tout de même un problème, en ce sens que si le POST contient l'une de ces valeurs mais que ce formulaire n'est pas valide, l'autre formulaire reste indéfini. Vous devez vous assurer que les deux sont définis, peu importe ce qui se trouve dans les données de publication.

+0

Merci, désolé j'ai ajouté les étiquettes de nom pour soumettre des boutons. Ai-je besoin de 2 séparés si "réservation" dans et si "examen" dans les déclarations, ou est-il possible d'avoir 1 boucle. Aussi, pourriez-vous suggérer comment gérer .save() dont j'ai parlé pour la partie suivante. Mon idée fonctionnera-t-elle? – Roma

+0

Je semble juste que le code a beaucoup trop de déclarations si et d'autres qui est difficile à lire – Roma