2011-03-17 6 views
0

私はサイエンスデータを入力するためのDjangoアプリケーションを構築しようとしていますが、可能なフォームを説明する上品な方法で問題が発生しています。Djangoデザインの質問:クライアントとサーバーの間で異なるフォームタイプを扱う

Imageモデルから継承したHCameraImageとMCameraImageという2つのモデルがあります。サイト上では、ユーザーはこれらの2つのモデルのどちらかを入力するHTMLフォームに記入することができます。言い換えれば、HCameraImageForm(request.POST)を使用してモデルを生成しています。私はクライアント側にそれを介して送信すると、私は自分自身が手動でどのような形のタイプを追跡する必要が見つけPOSTデータににimagetypeを追加することにより、ジャンゴに送信されている:

if request.POST['imagetype'] == "HCameraImage": 
    form = HCameraImageForm(request.POST) 
    form.save() 
if request.POST['imagetype'] == "MCameraImage": 
    form = MCameraImageForm(request.POST) 
    form.save()   
...etc 

は、よりエレガントな方法はありますこれを扱う?理想的には、私はいくつかの親基底クラスImageを持っています:

i = Image() 
i.loadFormData(request.POST) 

ここで、loadFormDataは正しい派生関数を呼び出します。

答えて

0

文字列を作成して、正しいフォームオブジェクトをインスタンス化することができます。このような何かがうまくいくはずです:

import myapp.models 

form_class = request.POST['imagetype'] + 'Form' 
form_class = getattr(myapp.models, form_class) 
form = form_class(request.POST) 
form.save() 
+0

私は、特定のクラスではなく、Image()としてオブジェクトを扱うことができるようにしたいと考えています。本質的に、私は多型をしようとしています。 – victor

関連する問題