Multiples Models en un Form Django
January 29, 2016
Multiples Models en un Form Django
Dando mis primeros pasos en django, me encontré con el ligero problema de no saber como subir datos a varios modelos desde una sola vista, bueno inicialmente me di cuenta que en un template view puedo hacer algo como
class MiTemplateView(TemplateView):
template_name='ruta/al/template'
formulario1=MiFormulario1(prefix='formulario1')
formulario2=MiFormulario1(prefix='formulario2')
... etc
def get_context_data(self, **kwargs):
context=super(SubirMaterial, self).get_context_data(**kwargs)
if 'formulario1' not in context:
context['formulario1']=self.formulario1
if 'formulario2' not in context:
context['formulario2']=self.formulario2
... etc
return context
Y ya con eso tengo los forms en el template, en el template es tan facil como
<form enctype="multipart/form-data" method="POST">
{% csrf_token %}
{{formulario1.as_p}}
{{formulario2.as_p}}
…etc
</form>
Y ahora solo escribo el post
def post(self, request, *args, **kwargs):
formulario1=MiFormulario1(request.POST, prefix=’formulario1?)
formulario2=MiFormulario2(request.POST, prefix=’formulario2?)
… etc
if formulario1.is_valid():
formulario1.save()
if formulario2.is_valid():
formulario2.save()
…etc
Ahora puede que algunos formularios requieran algunas Llaves Foraneas, digamos es el caso de formulario1 y formulario2, tan facil como
id_formulario1=formulario1.save()
elemento_modelo_formulario2=formulario2.save(commit=False)
elemento_modelo_formulario2.llaveForaneaFormulario1 = id_formulario1
formulario2.save()
Y ét violá, ojalá algún día aprenda bastante de django y me de cuenta como hacerlo mas elegantemente