2017-09-18 5 views
0

form_classを私のビューに動的に渡して、1つのビューですべての作業を実行できるようにします。また、それは目的に役立たないので、私は条件を使用する場合はしたくないです。djangoでurlを使って動的にformclassをビューに追加する方法はありますか?

urls.py:

url(r'^(?P<form>[\w-]+)/$',BillCycleCreateView.as_view(),name='BillCycle'), 

ビューは:

class BillCycleCreateView(CreateView): 
    template_name = 'form-view.html' 
    success_url = '.' 
    def get_form_class(self): 
     print(self.kwargs) 
     x = self.kwargs['form'] 
     print(x) 
     return x 

次のコードはstr object is not callableそのエラーが発生します。希望の結果を達成するためにそれを修正する方法や他の方法がありますか?どのようにクラスを返すことができますか?

ありがとうございます!

答えて

0

URLから取得した文字列(例では変数x)を実際のフォームクラスに変換するには、ifステートメントが必要です。

def get_form_class(self): 
    if self.kwargs['form'] == 'form_1': 
     return MyForm_1 
    elif self.kwargs['form'] == 'form_2': 
     return MyForm_2 
    else: 
     raise Exception('We have an unknown parameter in the url') 

より良い例外メッセージが助言される:

+0

しかし、私は様々なif文を書く必要があり、その目的は提供されません。 –

0

あなたはこのような何かを行うことができます。

関連する問題