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

标签 python django django-forms form-fields

我的 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。

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

谢谢。

最佳答案

您可以使用表单的 __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)

关于python - 有条件地显示和隐藏表单字段并设置字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6717249/

相关文章:

python - 没有名为 google.protobuf 的模块

关于提交评论的 Django 通知

django - Django 模板中的tinymce 小部件用法

python - ModelForm 编辑数据库记录的正确方法?

Python PolynomialFeatures 将数据转换为与原始数据不同的形状

python - ContentType.objects.get_for_model(obj) 在代理模型对象上使用时返回基类模型

python - 从我的本地环境调用 stripe charge API 时出现 TLS 问题

django - django 上的替代形式库,例如 sprox、formalchemy

python - 用 Python 编写平铺窗口管理器

python - Django:如何在应用程序之间访问区域设置字符串?