如何在表單提交但驗證失敗後設置字段元素的值?例如Django驗證失敗時的表格字段初始值
if form.is_valid():
form.save()
else:
form.data['my_field'] = 'some different data'
我真的不想把它放在視圖中,而是寧願將它作爲窗體類的一部分。
感謝
如何在表單提交但驗證失敗後設置字段元素的值?例如Django驗證失敗時的表格字段初始值
if form.is_valid():
form.save()
else:
form.data['my_field'] = 'some different data'
我真的不想把它放在視圖中,而是寧願將它作爲窗體類的一部分。
感謝
我落得這樣做
if request.method == 'POST':
new_data = request.POST.copy()
form = MyForm(data=new_data)
if form.is_valid():
form.save()
else:
new_data['myField'] = 'some different data'
希望這可以幫助別人
如果你有勢必 Form實例,並希望更改數據以某種方式,或者如果你想綁定一個未綁定的表單實例到一些數據,創建另一個表單實例。在表單實例中有無法更改數據。一旦創建了表單實例,您應該考慮它的數據不可更改,無論它是否有數據。
我真的不相信你的代碼有效。但是沒問題。基於文檔我會做這種方式:
if request.method == 'POST':
data = request.POST.copy()
form = MyForm(data)
if form.is_valid():
form.save()
else:
data['myField'] = 'some different data'
form = MyForm(initial=data)
你可以把它放在窗體類是這樣的:
class MyForm(forms.Form):
MY_VALUE = 'SOMETHING'
myfield = forms.CharField(
initial=MY_VALUE,
widget=forms.TextInput(attrs={'disabled': 'disabled'})
def __init__(self, *args, **kwargs):
# If the form has been submitted, populate the disabled field
if 'data' in kwargs:
data = kwargs['data'].copy()
self.prefix = kwargs.get('prefix')
data[self.add_prefix('myfield')] = MY_VALUE
kwargs['data'] = data
super(MyForm, self).__init__(*args, **kwargs)
它的工作方式,是它測試,看看是否所有的數據已被傳遞給窗體構造函數。如果有,它會複製它(未複製的數據是不可變的),然後在繼續實例化表單之前放入初始值。
偉大的解決方案。如果你想要保留表單的錯誤,你可以使用'new_form = MyForm(initial = data)new_form._errors = form._errors form = new_form' – Michael 2014-09-09 12:19:02