2010-03-03 28 views
23

Lo que trato de hacer es administrar varios formularios en una página, sé que hay conjuntos de formularios, y sé cómo funciona la administración de formularios, pero tengo algunos problemas con la idea que tengo en mente.Django - Trabajando con múltiples formas

Sólo para ayudarle a imaginar lo que mi problema es que voy a utilizar los modelos de ejemplo: Django

from django.db import models 

class Poll(models.Model): 
    question = models.CharField(max_length=200) 
    pub_date = models.DateTimeField() 

class Choice(models.Model): 
    poll = models.ForeignKey(Poll) 
    choice = models.CharField(max_length=200) 
    votes = models.IntegerField(default=0) 

Ahora, imagina ya he hecho las clases de formulario:

from django import forms 
from mysite.polls.models import Poll, Choice 

class PollForm(forms.ModelForm): 
    class Meta: 
     model = Poll 

class ChoiceForm(forms.ModelForm): 
    class Meta: 
     model = Choice 
     exclude = ('poll',) 

Entonces, lo que quiero hacer es tener varias instancias de formulario del modelo Elección y Elección en una sola página, pero tenga en cuenta que estos modelos también se pueden repetir:

<form action="{{url}}" method="post"> 
    {{pollform}} 
    {{choiceform}} 
    {{pollform}} 
</form> 

Como puede ver, hay dos formularios de encuesta y un formulario de Elección, pero los formularios de encuesta están separados por el formulario de Elección. Necesito que los formularios mantengan su orden en la página, por lo que es un poco más difícil de usar conjuntos de formularios.

El problema que tengo, es que los valores que vienen en la publicación son todos por el nombre "respuesta", así que obtengo una lista de todos los elementos de todas las formas con el nombre "respuesta" y no puedo identifica cuáles pertenecen a cada formulario.

No sé si esta explicación tiene una visión clara de mi problema. Alguna idea para hacer esto?

Gracias por su ayuda!

PD: No preste atención a la relación entre Poll and Choice, esos modelos son solo para aclarar el problema, por lo que la relación no importa en absoluto.

Respuesta

51

Utilice la kwarg prefix

Se puede declarar su formulario como:

form = MyFormClass(prefix='some_prefix') 

y luego, siempre que el prefijo es el mismo, los datos de proceso como:

form = MyFormClass(request.POST, prefix='some_prefix') 

Django se encargará del resto.

De esta manera puede tener tantas formas del mismo tipo como desee en la página

Cuestiones relacionadas