2011-07-13 28 views
9

¿Existe un método/práctica recomendada/algún medio común para combinar formularios que abarquen varios modelos relacionados?Django: combinación de formularios para modelos relacionados

Quiero crear/editar objetos modelo junto con otros objetos modelo relacionados en la misma página. Básicamente, ser capaz de crear/editar una instancia de modelo y otro conjunto de instancias de modelo relacionadas por una clave externa.

No es una gran explicación, lo sé.

class Person(models.Model): 
    name = models.CharField(max_length=64, unique=True) 

class PhoneNumber(models.Model): 
    person = models.ForeignKey(Person) 
    description = models.CharField(max_length=64, blank=True, null=True) 
    number = models.CharField(max_length=32, blank=True, null=True) 

Quiero ser capaz de crear/editar una persona, junto con todos sus números de teléfono asociados mediante un formulario simple/página.

He hecho esto antes de usar this nested form ejemplo, pero parece bastante hackish.

Respuesta

8
+0

inlineformset_factory proporciona un formset que me permitiría editar PhoneNumbers, pero no la Persona asociada. Si incluí un PersonForm junto con el PhoneNumberFormset (de fábrica) en el contexto, ¿podría modificarlos en la misma página, con save() funcionando correctamente para ambos? –

+3

Sí, pase el formulario y el formset a la página, luego póngalos en el mismo formulario, y en su vista, marque form.is_valid() y formset.is_valid() luego form.save() y formset.save(). Si hay superposición en los nombres de los campos, es posible que tenga que agregar un argumento de prefijo cuando defina el formulario. Voy a mirar alrededor de mi código del sistema operativo para ver un ejemplo. –

+0

Cabe señalar, para todos los efectos, así es como django.contrib.admin maneja esta situación. –

Cuestiones relacionadas