覆盖django酥脆形式的Submit按钮标签

问题描述

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

这是我的上传表单:

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',Submit('submit','Upload File',css_class='btn-success',formnovalidate='formnovalidate')) 

现在,我想创建一个相同形式的“编辑变体”。 File字段更改为CharField并使其只读。它显示文件的服务器路径,并且无法更改。 现在,我正在尝试更改按钮标签

class MySecondForm(MyForm):
  field_1 = forms.CharField()
  
  def __init__(self,**kwargs):
        super().__init__(*args,**kwargs)
        self.fields['field_1'].widget.attrs['readonly'] = True
        self.helper['submit'].label = "Save Changes"

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

是否可以设置现有“提交”的标签

解决方法

您绝对可以做到这一点!这是“编辑”表单的更新版本,其中包含用于更新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"

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...