¿Un campo oculto que devuelve un modelo? Entonces, ¿un ID de instancia modelo?
El widget de forms.HiddenInput
debe hacer el truco, ya sea en un campo FK o CharField se pone un ID de instancia de modelo en el.
class MyForm(forms.Form):
hidden_2 = forms.CharField(widget=forms.HiddenInput())
hidden_css = forms.CharField(widget=forms.MostWidgets(attrs={'style': 'display:none;'}))
supongo que la manera más rápida de conseguir este funcionamiento está
class MyForm(forms.Form):
model_instance = forms.ModelChoiceField(queryset=MyModel.objects.all(), widget=forms.HiddenInput())
form = MyForm({'model_instance': '1'})
form.cleaned_data['model_instance']
Pero no me gusta la idea de suministrar MyModel.objects.all() si de todos modos va a especificar un elemento.
Parece que para evitar ese comportamiento, tendría que anular el formulario __init__
con un QuerySet
más pequeño.
creo que prefiero la manera antigua:
class MyForm(forms.Form):
model_instance = forms.CharField(widget=forms.HiddenInput())
def clean_model_instance(self):
data = self.cleaned_data['model_instance']
if not data:
raise forms.ValidationError()
try:
instance = MyModel.objects.get(id=data)
except MyModel.DoesNotExist:
raise forms.ValidationError()
return instance
No piense 'ForeignKey' es un campo de forma válida ... es un campo modelo. Prefiero que devuelva una instancia de modelo en lugar de un número entero (cuando lo recupere más tarde con 'form.cleaned_data ['field']') – mpen
Jaja, tienes toda la razón ... lo siento :) –
forms.MostWidgets ? que significa la mayoría de los widgets disponibles? – fanny