2012-01-24 8 views
5

オブジェクトからis_validメソッドを使用するバインドされたフォームを作成したいと思います。その理由は、ユーザーに新しい検証ルールに従って修正したい古いデータがあるためです。次に、私のフォームでクリーンメソッドのコードを再利用したいと思います。バインドされていないフォームをバインドされたフォームに変換しますか?

私は私の応答をシリアル化することになった:

from django.utils import simplejson 
from django.core.serializers import serialize 

(...) 

fields_dict = simplejson.loads(serialize('json', [obj]))[0]['fields'] 
form = forms.MyForm(fields_dict) 
if form.is_valid 

これは動作しますが、それは非常にDjangishいないようです。また、これは一般的な問題のようですので、私はこれを行うより良い方法を探していました。 https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method しかし、私のための最も簡単な解決策になること:

は、非結合に結合していないから、データを変換する文書によると起こることを意味するものではありません。

+0

を教えてください:あなたはどこかに古いデータを持っており、これが保存されたことから、検証ルールが変更されました。 ModelFormを使用して古いデータを再検証し、エラーをユーザに表示したいのですか? – Martin

+0

'obj'はどこから来ますか?これはここで何が起こっているのかを判断するのに役立ちます。 –

+0

@Penthiとまったく同じです。私はooglesが私が探しているものを私に与えたと思う。おかげで –

答えて

11

既存のモデルインスタンスをModelFormにバインドするのに適したデータの辞書に変換するDjangoのdjango.forms.models.model_to_dict関数があります。

オブジェクトをシリアライズしてシリアライズするよりも、これはおそらくより効率的で、間違いなく「Djangish」になります。

また、instanceキーワードでフォームを作成すると、保存時に既存のレコードを更新することがわかります。だから、

:私はそれが正しい得た場合

from django.forms.models import model_to_dict 

... 

fields_dict = model_to_dict(obj) 
form = forms.MyForm(fields_dict, instance=obj) 
+1

ありがとう!これは私が探していたものです。 –

関連する問題