【问题标题】:How to exlude fields from forms?如何从表单中排除字段?
【发布时间】:2020-02-24 20:10:30
【问题描述】:

我有一个包含几个字段的模型表单。在一个模板中,我想在一个模板中使用所有这些字段,并在另一个模板中排除某个字段。是否可以不编写新表单而只在views.py 中排除该字段?

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    不完全是,但您不必重复自己。

    您可以定义一个包含您经常使用的所有字段的基本表单,并从中继承以添加字段

    class MyPersonBaseForm( forms.Form):
        surname = forms.CharField( max_length=100)
        forenames = ...
        age = ...
        company = ...
        ...
    class MyFooPersonForm( MyPersonBaseForm):
        foo = 
    

    MyFooPersonForm 拥有MyPersonForm 加上foo 的所有字段

    您还可以使用其__init__ 方法从表单子类中删除字段,如this post (garnertb 的相关答案粘贴在下面)

    class LoginFormWithoutNickname(LoginForm):
        def __init__(self, *args, **kwargs):
            super(LoginFormWithoutNickname, self).__init__(*args, **kwargs)
            self.fields.pop('nickname')
    

    【讨论】:

    • 这是我的 B 计划)
    • @pavel_antspovich 您还可以在基本表单中声明所有字段,并在子类中选择性地删除它们。已编辑我的答案。您甚至可以混合使用这些技术,但这很快就会变得混乱。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 2016-08-20
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多