有条件地显示和隐藏表单字段并设置字段值

Posted

技术标签:

【中文标题】有条件地显示和隐藏表单字段并设置字段值【英文标题】:Conditionally show and hide a form field and set the field value 【发布时间】:2011-10-06 17:32:58 【问题描述】:

我的 Django 中有一个看起来像这样的表单:

class PersonnelForm(forms.Form):
    """
    Form for creating a new personnel.
    """
    username = forms.RegexField(
        required=True, max_length=30, label=_("Name")
    )
    is_manager = forms.BooleanField(
        required=True, label=_("Is Manager")
    )

我在我的网站的两个地方使用此表单。其中一个地方,我想显示表单及其除is_manager 字段之外的所有字段,但我想将此字段的默认值设置为True。在另一个地方,我想显示表单及其所有字段,包括is_manager 字段,我希望它的默认值是False.

我怎样才能做到这一点?似乎是一件微不足道的事情,但我想不通。

谢谢。

【问题讨论】:

【参考方案1】:

您可以使用表单的__init__ 方法隐藏(或删除)该字段,即

class PersonnelForm(forms.Form):
    """
    Form for creating a new personnel.
    """
    username = forms.RegexField(
        required=True, max_length=30, label=_("Name")
    )
    is_manager = forms.BooleanField(
        required=True, label=_("Is Manager")
    )

    def __init__(self, *args, **kwargs):
        delete_some_field = kwargs.get('delete_some_field', False)
        if 'delete_some_field' in kwargs:
            del kwargs['delete_some_field']
        super(PersonnelForm, self).__init__(*args, **kwargs)
        if delete_some_field:
            del self.fields['is_manager']
            # or
            self.fields['is_manager'].widget = something_else

#views.py
form = PersonnelForm(...., delete_some_field=True)

【讨论】:

嗨克拉斯。我将小部件更改为隐藏输入。如何为其分配默认值?谢谢。 你可以使用字段的“initial”关键字参数,或者更改表单的“initial['field']”,我总是忘记哪个真正有效。【参考方案2】:

如果功能不同,您可以使用从另一种形式继承一种形式并适当显示(即排除字段)。

另外,Form 的 init 方法可以接受参数,这可以用来初始化表单的字段值。

【讨论】:

以上是关于有条件地显示和隐藏表单字段并设置字段值的主要内容,如果未能解决你的问题,请参考以下文章

隐藏或排除前端表单中的 ACF 字段并存储默认值

markdown Drupal有条件地显示/隐藏字段。

如何在 MongoDB 中有条件地显示/隐藏字段

如何在 Rails 中执行 AJAX-y 条件显示/隐藏表单字段?

在 Squarespace 中显示/隐藏表单域

如何在颤动中显示带有提交按钮和隐藏输入字段的html表单