![](/img/trans.png)
[英]django post_signal triggered on form.save(commit=False)
[英]Form.save(commit=False) behaving differently in Django 1.2.3?
在今天之前,我一直在使用Django 1.1。 為了確保與時俱進,我決定更新Django環境以使用Django 1.2.3。 不幸的是,我遇到了一個問題。
以下代碼未在1.1中引發ValueError:
instance = FormClass(
request.POST,
instance=existing_instance
).save(commit=False)
但是,既然我已經升級,那么每次都會引發ValueError。 我有一個SSN字段要作為表單的一部分提交,在執行instance.save()調用之前,我刪除了破折號。 不幸的是,發生ValueError的原因是Django認為我的SSN值太長(期望9個字符,並且正在接收11-123-45-6789)。
我瀏覽了Django文檔,但找不到與此更改有關的任何內容。 知道發生了什么嗎? 我一直認為“ commit = False”參數的目的是允許在保存信息之前對數據進行預處理。
我想念什么嗎?
根據save()
方法上的1.2文檔 ,“如果使用commit = False調用save(),則它將返回一個尚未保存到數據庫的對象。” 所以我不確定為什么會發生功能上的變化,但是有可能在1.1驗證/檢查代碼中僅當對象保存到數據庫時才運行,而在1.2中,它發生得更早(在保存對象之前) 。
無論如何,如果您要清理在表單中輸入的數據,則可能應該在FormClass中對其進行清理:
def clean_ssn(self):
data = re.sub(r'[^0-9]','',self.cleaned_data['ssn'])
#validation code here
return data
那至少應該解決這個問題...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.