【问题标题】:Django crispy forms - Set hidden field valueDjango 脆皮表单 - 设置隐藏字段值
【发布时间】:2019-01-24 18:24:15
【问题描述】:

我有以下 django 酥脆的形式:

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"))

我想通过隐藏字段 TEMPLATE 传递一个值。我已阅读 https://django-crispy-forms.readthedocs.io/en/latest/api_helpers.html ,但不知道如何执行此操作。我怎样才能完成这项工作?

【问题讨论】:

  • 您当前的代码有什么问题?你看到了什么?
  • 代码正常,但我想在提交表单时将隐藏的TEMPLATE字段的值设置为“VALUE”。
  • 我不知道“VALUE”是什么以及它来自哪里。您可以在视图中初始化表单时为字段设置初始值:form = ConsultForm(initial={'TEMPLATE': 'VALUE'}),它将保留在隐藏的输入字段中并因此提交。或者如果它是一个固定值,在表单初始化器中:self.fields['TEMPLATE'].initial = 'VALUE'
  • 依靠隐藏的输入值将数据从一个视图传递到下一个视图通常是个坏主意。原因是任何人都可以在发布之前更改该值。因此,仅在方便时才使用它,而不是在正确至关重要的情况下使用。或者有一些机制来检查提交的值是否仍然有意义。

标签: python django django-crispy-forms


【解决方案1】:

您可以像这样设置表单字段的初始值:

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(带有像 Field 这样的通用布局对象),您可以像以前一样设置属性,例如:

Field('TEMPLATE', id="template", value="something" template="my-template.html")

如果这就是你所要求的。

或者如果上面的操作并不容易,那么在crispy中有一个名为Hidden的布局对象。您可以使用它创建隐藏的输入字段:

Hidden('name', 'value')

你把它当作Hidden('TEMPLATE', 'mysomethingvalue')

喜欢:

Button('name', 'value')

为了完全清楚:

helper.layout = Layout(
        Hidden('TEMPLATE', 'myvalue'),
        Hidden('DATE', 'anydate'))

【讨论】:

  • 这很好,但是有没有办法用表单助手来设置它。我没有直接在我的代码中使用表单。
  • @user61629 - 我更新了我的答案,但我不确定这是否是你所要求的。
  • 非常感谢,隐藏的领域很棒!我看到它不需要在模型或表单定义中声明。
猜你喜欢
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 2020-08-21
  • 2014-02-28
  • 2016-09-27
  • 2019-07-27
  • 2014-12-17
相关资源
最近更新 更多