[英]Overwrite Submit button label in django crispy forms
我有一个工作正常的上传表单。 这个想法是有人上传一个文件并选择一个标题。 该文件被保存到服务器并且不能更改,但标题可以。 所以我正在寻找一种方法来重用相同的表单并将提交按钮上的 label 从“上传文件”更改为“保存更改”。
这是我的上传表格:
class MyForm(forms.Form):
field_1 = forms.FileField()
field_2 = forms.CharField()
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_method = 'post'
self.helper.layout = Layout(
Row( Column('field_1', css_class='form-group col-md-12 mb-0') ),
Row( Column('field_2', css_class='form-group col-md-12 mb-0') ),
Submit('submit', 'Upload File', css_class='btn-success', formnovalidate='formnovalidate'))
现在我想创建一个相同形式的“编辑变体”。 File 字段更改为 CharField 并设置为只读。 它显示文件的服务器路径并且不能更改。 现在我正在尝试更改按钮 label。
class MySecondForm(MyForm):
field_1 = forms.CharField()
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['field_1'].widget.attrs['readonly'] = True
self.helper['submit'].label = "Save Changes"
以上没有显示错误但不起作用。 label 仍然是“上传文件”。 我当然可以复制和更改我的 FormHelper 布局,但我的实际表单有 20 多个字段,我宁愿不只是复制粘贴整个块来更改一个 label。
有没有办法设置现有提交的 label ?
您绝对可以这样做,这是您的“编辑”表单的更新版本,具有更新Submit
按钮的自定义 init 方法:
class MySecondForm(MyForm):
field_1 = forms.CharField()
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['field_1'].widget.attrs['readonly'] = True
# From crispy_forms.layout.Layout.__init__, it sets up self.fields
# as a list, which we can now alter b/c they've been created in the
# parent class. Let's target the Submit() item, which is the last
# item in layout.fields:
self.helper.layout.fields[-1].value = "Save Changes"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.