簡體   English   中英

Form.save(commit = False)在Django 1.2.3中表現不同嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM