以 Django 脆皮形式覆盖提交按钮标签

我有一个工作正常的上传表格。这个想法是有人上传文件并选择标题。文件被保存到服务器并且无法更改,但标题可以。所以我正在寻找一种方法来重用相同的表单并将提交按钮上的标签从“上传文件”更改为“保存更改”。


这是我的上传表格:


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 并设为只读。它显示文件的服务器路径并且不能更改。现在我正在尝试更改按钮标签。


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"

以上没有显示错误但不起作用。标签仍然是“上传文件”。我当然可以只复制和更改我的 FormHelper 布局,但我的实际表单有 20 多个字段,我宁愿不只是复制粘贴整个块来更改一个标签。


有没有办法设置现有提交的标签?


ibeautiful
浏览 121回答 1
1回答

扬帆大鱼

你绝对可以做到!这是您的“编辑”表单的更新版本,带有更新按钮的自定义 init 方法Submit: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"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python