2010-09-20 53 views
1

在此之前,我一直在使用Django 1.1。爲了確保我與時俱進,我決定更新我的Django環境以使用Django 1.2.3。不幸的是,我遇到了一個問題。Form.save(commit = False)在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」參數的目的是在保存信息之前允許預處理數據。

我錯過了什麼嗎?

回答

3

根據1.2 docs on the save() method,「如果用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 

這至少應該解決這個問題...

+2

def clean_ssn(self): ... 定製清潔劑的形式爲清潔_ {{屬性}}。 – brildum 2010-09-21 12:43:48

+0

對,對,我知道。一個簡單的錯誤,我很快就會解決。 – 2010-09-21 14:51:27

相關問題