【问题标题】:How to change Submit button text from a view in crispy-forms?如何从脆皮形式的视图中更改提交按钮文本?
【发布时间】:2014-03-07 07:47:30
【问题描述】:

在我的 forms.py 中,我有以下内容:

self.helper.layout = Layout(
    Fieldset(
        None,
        'name'
    ),
    FormActions(
        Submit('submit', 'Add Thing', css_class='btn-primary')
    )
)

但我使用相同的视图来添加和编辑项目。所以我想根据views.py中的某些条件更改按钮文本(上面的添加内容)。我该怎么做?

【问题讨论】:

  • 我以前没有使用过脆皮表格。但是,django 仍然是 python。所以你不能定义一个函数来根据条件呈现不同的类(如果这是你要找的)?

标签: python django django-crispy-forms


【解决方案1】:

一种方法是将参数传递给确定提交按钮文本的表单类。

一个虚拟的例子:

查看

...
form = MyFormClass(is_add=True)
...

表单类

class MyFormClass(forms.Form):
    def __init__(self, *args, **kwargs):
        self.is_add = kwargs.pop("is_add", False)
        super(MyFormClass, self).__init__(*args, **kwargs)

    @property
    def helper(self):
        helper = FormHelper()
        helper.layout = Layout(
            FormActions(
                Submit('submit', 'Add Thing' if self.is_add else 'Edit thing', css_class='btn-primary')
            )
        )
        return helper

【讨论】:

    【解决方案2】:

    这是对@kviktor 答案的简单改进。准备您的表单以接受附加参数 submit_label 并使用它来命名您的按钮。

    class MyForm(forms.Form):
        def __init__(self, *args, **kwargs):
            submit_label = kwargs.pop("submit_label", "Submit")
            super().__init__(*args, **kwargs)
    
            self.helper = FormHelper()
            self.helper.layout = Layout(
                Fieldset(
                    None,
                    'name'
                ),
                FormActions(
                    Submit('submit', submit_label, css_class='btn-primary')
                )
            )
    

    覆盖视图的get_form 方法,根据您的条件传递submit_label 的值来实例化表单。

    class MyView(generic.FormView):
        def get_form(self):
            form = MyForm(**super().get_form_kwargs(), submit_label="Add Thing")
            return form
    

    【讨论】:

    • 改一个标签的答案真的超过10行吗?
    • 其实我认为crispy form的开发并没有考虑到你必须从视图中设置标签的场景,这就是你必须写这么多的原因。
    猜你喜欢
    • 2020-04-02
    • 2021-04-15
    • 2023-04-03
    • 2020-12-01
    • 1970-01-01
    • 2014-05-03
    • 2015-10-25
    • 2012-08-12
    • 2017-02-19
    相关资源
    最近更新 更多