如何清理表單中的數據並重新顯示清除的數據而不是提交的數據?如何強制清理一個字段並在Django中重新顯示它?
我的表單中有幾個字段,每次用戶提交時,都應該重新顯示用戶輸入的值。但是,我希望爲用戶清理和更新一些字段。更具體地說,我有一個字段FriendlyIntegerField(forms.CharField)
,其中我重寫to_python
不僅可以調用int(str(value))
,還可以將任何負數設置爲0等。我不想重新顯示帶有無效數據的表單,並讓用戶自己修復它(其中Django是如何讓我這樣做的)。
我沒有問題清理數據並將其用於我的視圖函數的其餘部分,但是如何使用此數據更新實際的表單?
順便說一下,表單並不反映我的數據模型中的結構,因此它繼承自Form
而不是ModelForm
。
編輯:
我的領域(在一個精簡版)看起來是這樣的:
class FriendlyIntegerField(forms.CharField):
def to_python(self, value):
try:
return str(int(str(value).replace(' ','')))
except:
raise forms.ValidationError('some error msg')
我的表格(在精簡版)看起來是這樣的:
class SearchForm(forms.Form):
price_from = FriendlyIntegerField()
price_to = FriendlyIntegerField()
我的看法:
def search(request, key):
if request.method == 'POST':
form = SearchForm(request.REQUEST)
if not form.is_valid():
print "Form not valid"
else:
form = SearchForm()
return render_to_response('path_to_template', {'form' : form}
作爲一個便箋,你應該注意這一點。我不記得我在哪裏讀過它,但顯然改變用戶輸入的值可能會讓最終用戶感到困惑。簡單地告訴他們負面的價值觀是不被允許的,重新顯示他們(錯誤的)輸入可能比你想象的更加用戶友好。 – LaundroMat 2010-10-25 18:56:57
我絕對同意LaundroMat。默默地改變用戶輸入通常不是一個好主意。負數可能不是最好的例子,我可能會在最終版本中跳過。不過我想刪除數字中的空格。該字段代表價格,我認爲自動將「250 000」更改爲「250000」是個好主意。 – knatten 2010-10-26 06:07:03