| |||
claves foraneas en formularios Django Buenas, otra duda que tengo. A ver si pueden ayudarme por favor. Tengo un formulario que extiende de la clase ModelForm de django. El detalle esta en que el formulario extiende de un model llamado "trabajos" se ingresan los detalles de los trabajos por el usuario. Este model tiene un campo usuario_id que hace el foreign key con el usuario. Pero al traerme el formulario completo me trae el combo de seleccion de usuario. y si la clase Meta del formulario le pongo que me excluya ese campo. no me permite guardarlo. Hay una forma de que yo pueda filtrar ese combo a que me traiga unicamente el usuario activo? o el dato que necesito?. |
| |||
Respuesta: claves foraneas en formularios Django Para filtrar el campo podrías pasar al formulario el usuario como parámetro y en una función como el init restringir el queryset:
Código:
Ahora con esto se te verá en la plantilla sí o sí como un select, quizás sería más agradable no mostrarlo, redifiniendo el widget como hidden y usando como initial el id del usuario.self.fields['usuario'].queryset = Usuario.objects.filter(id=parametro.id) También podrías hacer esto, si el campo usuario puede ser nulo o blanco pasar como parámetro al usuario, dejar guardado como atributo del formulario a éste y en el método clean hacer algo como:
Código:
Así daría lo mismo si muestras o no en el template el campo.self.cleaned_data['usuario'] = usuario Otra cosa que podrías hacer es excluir el campo y después del save agregar el usuario:
Código:
Aunque en este caso probablemente sería adecuado englobar la funcion en una transacción para asegurarte de no guardar, jamás, el formulario sin guardar también el usuario.registro = form.save() registro.usuario = usuario registro.save() No se sí habrán formas más trasparentes de lograrlo, pero esas son las que se me ocurren. Saludos. |
| |||
Respuesta: claves foraneas en formularios Django Muchas gracias. pero tengo dos dudas con respecto a lo que me dijiste. Intente hacer el ultimo ejemplo. Cita: y me dice que la columna usuario_id no puede estar vacia como si no tomara la asignacion "registro.usuario = usuario" y lo otro es en el caso de usarCódigo: registro = form.save() registro.usuario = usuario registro.save()
Código Python:
como le paso ese parametro.id al metodo __init__??? y perdona pero es q aun no comprendo mucho el funcionamiento del metodo. Ver original |
| |||
Respuesta: claves foraneas en formularios Django ok. hice esto como comentaste muestro el codigo: views.py
Código Python:
y este el codigo __init__ del formularios.pyVer original
Código Python:
Segun probando lo que entendi. y me toma el parametro id que le paso. pero me muestra el siguiente error:Ver original Cita: la linea 41 es "self.fields['usuario'].queryset = Usuario.objects.get(id=id)" Django Version: 1.2.3 Exception Type: KeyError Exception Value: 'trabajador' Exception Location: /home/proyecto/formularios.py in __init__, line 41 |
| |||
Respuesta: claves foraneas en formularios Django jajajjajajaja. el error era porq no le habia quitado el exclude en la class Meta!!!!!!1 jajajajajajaj. muchas gracias refreegrata!!!!! por la pronta respuesta. y la clase. jajajaja. :D Solo me queda una duda. como hago para ponerle el parametro como initial? para que me lo tome por defecto??????? Última edición por rjulio21; 22/07/2011 a las 09:51 |
| |||
Respuesta: claves foraneas en formularios Django ok. Muchas gracias. pero no entendiste lo que quise decir. me referia a que inicialmente use la tercera opcion que diste y me dio error, exactamente por eso, porq el campo es obligatorio. luego use la primera. y si me funciono perfect. pero no sabia como darle el valor inicial. pero ya todo lo hice y me corrio perfecto. Muchas gracias igual por tu explicacion, me aclaraste bien varias dudas. :D |
| |||
Respuesta: claves foraneas en formularios Django No habia visto la actualizacion de tu comentario. Muchas gracias. perfecto. :D Al final lo hice modificando el metodo __init__ como explicaste en la primera. :D |
Etiquetas: |