【问题标题】:Overwrite Submit button label in django crispy forms覆盖 Django 脆皮表单中的提交按钮标签
【发布时间】:2020-12-01 00:50:02
【问题描述】:

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

这是我的上传表单:

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 多个字段,我宁愿不只是复制粘贴整个块来更改一个标签。

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

【问题讨论】:

    标签: python django django-crispy-forms form-helpers


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 2020-04-02
      • 2013-12-06
      • 2017-02-19
      • 2021-12-12
      • 2020-08-21
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      相关资源
      最近更新 更多