Ver Mensaje Individual
  #2 (permalink)  
Antiguo 22/07/2011, 08:43
refreegrata
 
Fecha de Ingreso: agosto-2008
Mensajes: 198
Antigüedad: 15 años, 9 meses
Puntos: 27
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:
self.fields['usuario'].queryset = Usuario.objects.filter(id=parametro.id)
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.

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:
self.cleaned_data['usuario'] = usuario
Así daría lo mismo si muestras o no en el template el campo.

Otra cosa que podrías hacer es excluir el campo y después del save agregar el usuario:
Código:
registro = form.save()
registro.usuario = usuario
registro.save()
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.

No se sí habrán formas más trasparentes de lograrlo, pero esas son las que se me ocurren. Saludos.