Hola Tengo un modelo de dominio, utilizado en la aplicación Django, que me gustaría presentar en un solo formulario. Creé mi aplicación con ModelForms personalizados (sin muchos cambios, algunos campos excluidos, etc.). dependencias del modelo son las siguientes:django formulario en línea con formularios personalizados
Complaint
\
.--- CarInfo
.--- Customer
Mi función de vista es el siguiente:
def make(request):
if request.method == 'POST':
parameters = copy.copy(request.POST)
complaint = Complaint()
carInfo = CarInfo()
customer = Customer()
customer_form = CustomerForm(parameters, instance=customer)
carInfo_form = CarInfoForm(parameters, instance=carInfo)
parameters['complaint_date'] = get_current_date()
parameters['customer'] = 1 # dummy value to allow validation success
parameters['car_info'] = 1 # dummy value to allow validation success
form = ComplaintForm(parameters, instance=complaint)
if form.is_valid() and customer_form.is_valid() and carInfo_form.is_valid():
carInfo_form.save()
customer_form.save()
parameters['customer'] = customer.id
parameters['car_info'] = carInfo.id
form = ComplaintForm(parameters, instance=complaint)
form.save()
return index(request)
else:
form = ComplaintForm()
carInfo_form = CarInfoForm()
customer_form = CustomerForm()
return render_to_response('complaints/make_complaint.html', {'complaint_form' : form, 'customer_form' : customer_form, 'carInfo' : carInfo_form})
No me gusta este enfoque demasiado, por lo demás no funciona en todos los ambientes que -thou no he encontrado la razón por la que no funciona. He estado buscando arreglar un poco este código y encontré algo como formset en línea (http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#inline-formsets). Esta solución parece estar bien, pero dado que mis formularios están personalizados, puedo usarlos.
Tal vez alguien podría ofrecerme algunos consejos sobre cómo resolver adecuadamente este caso. Las soluciones más limpias son muy apreciadas.
EDITADO Hay un caso para mí, donde estas soluciones simplemente no funcionan. A pesar de establecer valores ficticios en claves externas, cuando llamo is_valid() obtengo FALSE, con un mensaje de error que indica que estos campos no están configurados. Estoy observando este problema con django 1.2.5 - ocurre en el servidor que intento ejecutar esta aplicación, sin embargo, mi computadora portátil (también django 1.2.5) no tiene este problema.
¿Puedes publicar tus clases y formularios modelo? – DTing
Respuesta actualizada ... – FallenAngel