एक छुपा क्षेत्र जो मॉडल लौटाता है? तो एक मॉडल उदाहरण आईडी?
forms.HiddenInput
विजेट है कि क्या एक FK क्षेत्र या CharField पर आप में एक मॉडल उदाहरण आईडी डाल चाल करना चाहिए,।
class MyForm(forms.Form):
hidden_2 = forms.CharField(widget=forms.HiddenInput())
hidden_css = forms.CharField(widget=forms.MostWidgets(attrs={'style': 'display:none;'}))
मैं इस काम के प्राप्त करने के लिए सबसे तेज़ तरीका लगता है
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']
है
लेकिन अगर आप एक आइटम को वैसे भी निर्दिष्ट करने जा रहे हैं तो मुझे MyModel.objects.all() की आपूर्ति करने का विचार पसंद नहीं है।
ऐसा लगता है कि उस व्यवहार से बचने के लिए, आपको को छोटे QuerySet
के साथ ओवरराइड करना होगा।
मुझे लगता है कि मैं पुराने जमाने तरीका पसंद करते हैं:
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
स्रोत
2011-01-14 00:29:55
मत सोचो 'ForeignKey' एक वैध प्रपत्र क्षेत्र है ... यह एक मॉडल क्षेत्र है। मैं इसके बजाय एक पूर्णांक की बजाय एक मॉडल उदाहरण लौटा दूंगा (जब मैं इसे बाद में 'form.cleaned_data [' field '] ' – mpen
हाहा के साथ पुनर्प्राप्त करता हूं, तो आप बिल्कुल सही हैं .. इसके बारे में खेद है :) –
रूप। मॉस्टविड्ज ? अर्थात् अधिकांश उपलब्ध विजेट्स? – fanny