在我的forms.py中,我有以下内容:
self.helper.layout = Layout(
Fieldset(
None,
'name'
),
FormActions(
Submit('submit', 'Add Thing', css_class='btn-primary')
)
)
但我使用相同的视图来添加和编辑项目。所以我想根据views.py中的某些条件更改按钮文本(上面的添加内容)。我怎么能这样做?
答案 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