有条件地显示和隐藏表单域并设置字段值 [英] Conditionally show and hide a form field and set the field value

查看:108
本文介绍了有条件地显示和隐藏表单域并设置字段值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

  class PersonnelForm(forms.Form):


$$
username = forms.RegexField(
required = True,max_length = 30,label = _(名称)

is_manager = forms.BooleanField(
required = True,label = _(Is Manager)

我在我的网站的两个地方使用这个表单。其中一个地方,我想显示窗体和所有的字段,除了 is_manager 字段,但我想将此字段的默认值设置为。在另一个地方,我想显示表单及其所有字段,包括 is_manager 字段,我希望它的默认值为$ code> False。



我该如何完成?似乎是一个微不足道的事情,但我无法理解。



谢谢。

解决方案

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

  class PersonnelForm(forms.Form):

创建新人员的表单

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)
如果kwargs中的'delete_some_field':
del kwargs ['delete_some_field']
super(PersonnelForm,self).__ init __(* args,** kwargs)
如果delete_some_field:
del self.fields ['is_manager']
#或
self.fiel ds ['is_manager']。widget = something_else

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


I have a form in my Django that looks something like this:

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

I use this form in two places in my site. One one of the places, I'd like to display the form and all of its fields except the is_manager field but I would like to set the default value of this field to True. In the other place, I'd like to display the form and all of its fields including the is_manager field and I would like it to have a default value of False.

How can I accomplish this? Seems to be a trivial thing but I can't figure it out.

Thanks.

解决方案

You could use the form's __init__ method to hide (or delete) the field, i.e.

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)

这篇关于有条件地显示和隐藏表单域并设置字段值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆