如何更改酥脆表单中的提交按钮文本?

时间:2014-02-10 05:00:48

标签: python django django-crispy-forms

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

这是对@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