1

今日まで、私は Django 1.1 を使用してきました。時代に遅れないようにするために、Django 1.2.3 を使用するように Django 環境を更新することにしました。残念ながら、問題が発生しました。

次のコードは、1.1 では ValueError を発生させませんでした:

        instance = FormClass(
            request.POST,
            instance=existing_instance
        ).save(commit=False)

ただし、アップグレードしたので、毎回 ValueError が発生します。フォームの一部として送信する SSN フィールドがあり、instance.save() 呼び出しを行う前にダッシュを取り除きます。残念ながら、Django が私の SSN 値が長すぎると判断したため、ValueError が発生します (9 文字が必要で、11 -- 123-45-6789 を受信して​​います)。

Django のドキュメントを調べましたが、この変更に関連するものは見つかりませんでした。何が起こっているのか分かりますか?「commit=False」パラメータの目的は、情報を保存する前にデータを前処理できるようにすることだといつも思っていました。

何か不足していますか?

4

1 に答える 1

3

メソッドの1.2 ドキュメントにsave()よると、「save() を commit=False で呼び出すと、データベースにまだ保存されていないオブジェクトが返されます。」したがって、なぜ機能が変更されたのかはわかりませんが、1.1 ではオブジェクトがデータベースに保存されたときにのみ検証/チェック コードが実行され、1.2 では以前に (オブジェクトが保存される前に) 実行された可能性があります。 .

いずれにせよ、フォームに入力されているデータをクリーニングする場合は、おそらく FormClass でクリーニングする必要があります。

def clean_ssn(self):
    data = re.sub(r'[^0-9]','',self.cleaned_data['ssn'])
    #validation code here
    return data

それは少なくとも問題を解決するはずです...

于 2010-09-20T23:10:17.237 に答える