質問

今日より前に、私はDjango 1.1を使用していました。時代に追いついていることを確認するために、Django環境を更新してDjango 1.2.3を使用することにしました。残念ながら、私は問題に遭遇しました。

次のコードは、1.1でバリューエラーを上げませんでした。

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

しかし、私がアップグレードしたので、それは毎回バリューエラーを上げます。私は自分のフォームの一部として提出しているSSNフィールドを持っています。Instance.save()呼び出しを行う前にダッシュを剥がします。残念ながら、Djangoが私のSSN値が長すぎると考えているため、ValueErrorは発生します(9文字が予想され、11-123-45-6789を受け取っています)。

Django Docsを調べてみましたが、この変更に関連するものは見つかりませんでした。何が起こっているのか考えていますか?私は常に、「コミット= false」パラメーターの目的は、情報を保存する前にデータの前処理を許可することであると考えていました。

私は何かが足りませんか?

役に立ちましたか?

解決

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top