ibeautiful
2023-05-16 15:11:15
我有一個工作正常的上傳表格。這個想法是有人上傳文件并選擇標題。文件被保存到服務器并且無法更改,但標題可以。所以我正在尋找一種方法來重用相同的表單并將提交按鈕上的標簽從“上傳文件”更改為“保存更改”。這是我的上傳表格: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 多個字段,我寧愿不只是復制粘貼整個塊來更改一個標簽。有沒有辦法設置現有提交的標簽?
1 回答

揚帆大魚
TA貢獻1799條經驗 獲得超9個贊
你絕對可以做到!這是您的“編輯”表單的更新版本,帶有更新按鈕的自定義 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"
添加回答
舉報
0/150
提交
取消