Python Django crispy forms-设置隐藏字段值
我有以下的django脆饼:Python Django crispy forms-设置隐藏字段值,python,django,django-crispy-forms,Python,Django,Django Crispy Forms,我有以下的django脆饼: class ConsultForm(forms.ModelForm): class Meta: model = Consults # Your User model fields = [ 'TEMPLATE','EMAIL', 'DATE'] labels = { 'EMAIL' : 'Your Email', 'DATE' : 'Todays date',
class ConsultForm(forms.ModelForm):
class Meta:
model = Consults # Your User model
fields = [ 'TEMPLATE','EMAIL', 'DATE']
labels = {
'EMAIL' : 'Your Email',
'DATE' : 'Todays date',
# 'captcha': "Enter captcha"
}
helper = FormHelper()
helper.form_method = 'POST'
helper.form_action = "/contact/"
helper.form_id = 'form' # SET THIS OR BOOTSTRAP JS AND VAL.JS WILL NOT WORK
helper.add_input(Submit('Submit', 'Submit', css_class='btn-primary'))
helper.layout = Layout(
Field('TEMPLATE', type="hidden"),
Field('DATE', type="hidden"))
我想用隐藏字段模板传递一个值。我读过,但不知道怎么做。如何完成此操作?您可以如下设置表单字段初始值:
class ConsultForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.initial['TEMPLATE'] = 'my_initial_value'
您还可以在代码中的其他位置更改字段的值,如:
form = ConsultForm(instance=instance)
form.initial['TEMPLATE'] = 'new_value'
使用formhelper(使用crispy Universal Layout对象,如Field),可以像以前一样设置属性,如:
Field('TEMPLATE', id="template", value="something" template="my-template.html")
如果那是你想要的
或者,如果上述操作不容易,那么在crispy中有一个名为隐藏的布局对象。您可以使用以下选项创建隐藏的输入字段:
Hidden('name', 'value')
您可以将其用作Hidden('TEMPLATE','mysomethingvalue')
比如:
要说清楚:
helper.layout = Layout(
Hidden('TEMPLATE', 'myvalue'),
Hidden('DATE', 'anydate'))
您当前的代码有什么问题?您看到了什么?代码正在运行,但我想在提交表单时将隐藏模板字段的值设置为“值”。我不知道“值”是什么以及它来自何处。在视图中初始化表单时,可以将初始值设置为字段:
form=ConsultForm(initial={'TEMPLATE':'VALUE'})
,它将保留在隐藏的输入字段中,并因此提交。或者,如果它是一个固定值,则以initialiser:self.fields['TEMPLATE'].initial='value'
的形式,依靠发布的隐藏输入值将数据从一个视图传递到下一个视图通常是一个坏主意。原因是任何人都可以在发布之前更改该值。因此,只有在方便的情况下才使用它,而不是在正确性至关重要的情况下。或者有一些机制来检查提交的值是否仍然有意义。这很好,但是有一种方法可以用表单帮助器来设置它。我没有在我的代码中直接使用表单。@user61629-我更新了我的答案,但我不确定这是否是你想要的。非常感谢,这个隐藏字段很棒!我发现它不需要在模型或表单定义中声明。
helper.layout = Layout(
Hidden('TEMPLATE', 'myvalue'),
Hidden('DATE', 'anydate'))