Django表单:隐藏的模型字段? [英] Django Forms: Hidden model field?
问题描述
我有一个表单
。我想包括返回模型的隐藏字段。我会把它视为价值观;我只需要它发布到下一页。
I've got a Form
. I want to include a hidden field that returns a model. I'll set it's value in the view; I just need it to be posted along to the next page.
我应该在表单类中使用什么字段?
What field am I supposed to use in the form class?
推荐答案
返回模型的隐藏字段?所以一个模型实例ID?
A hidden field that returns a model? So a model instance ID?
forms.HiddenInput
小部件应该做的诀窍,无论是在FK字段还是CharField你将一个模型实例ID放入。
The forms.HiddenInput
widget should do the trick, whether on a FK field or CharField you put a model instance ID in.
class MyForm(forms.Form):
hidden_2 = forms.CharField(widget=forms.HiddenInput())
hidden_css = forms.CharField(widget=forms.MostWidgets(attrs={'style': 'display:none;'}))
我想最快的方式来获得这个工作是
I suppose the fastest way to get this working is
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()的想法。
But I don't like the idea of supplying MyModel.objects.all() if you're going to specify one item anyways.
似乎要避免这种行为,您必须用 __ init __
的格式覆盖较小的 QuerySet
。
It seems like to avoid that behavior, you'd have to override the form __init__
with a smaller 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
这篇关于Django表单:隐藏的模型字段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!