如何从表单中排除字段?

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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 您还可以在基本表单中声明所有字段,并在子类中选择性地删除它们。已编辑我的答案。您甚至可以混合使用这些技术,但这很快就会变得混乱。

以上是关于如何从表单中排除字段?的主要内容,如果未能解决你的问题,请参考以下文章

html 从表单字段中排除特殊字符

Django - 如何排除表单字段视图?

Django 1.3 CreateView/ModelForm:unique_together 验证,其中一个字段从表单中排除

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

使用JavaScript / Ajax排除表单字段提交到支持bean

如何从表单序列化中排除按钮和标签?