2017-02-09 6 views
0

文字列をフォームに変換するにはどうすればよいですか?Django:文字列をフォームに変換する方法は?

モデルでは、この行を使用できます。

model = apps.get_model(app_label='app_label', model_name='str_model') 

私は、すなわち3つの形式があります:

  • Fund_employee
  • Fund_supplier
    • Fund_customerをし、これを実行したいと思います。

      type = "customer" 
      form = "Fund_"+type #that would make "Fund_customer" 
      form = apps.get_form(form) #I wonder if there's a function like this. 
      

      私はこれを達成するためにかの条件をしたいいけません。

    +0

    モデルオブジェクトからフォームを作成するか、文字列「チーズ」をフォームに変換することを意味しますか? – Sayse

    +0

    はい。私は私のヘッダーを更新しました。間違って申し訳ありません – aldesabido

    答えて

    3

    Djangoには、モデルと同様にフォームクラスのレジストリがありません。

    最も簡単な解決策は、その後、フォームクラスを取得するための辞書検索を行う

    forms = { 
        'customer': Fund_customer, 
        'employee': Fund_employee, 
        'supplier': Fund_supplier, 
    } 
    

    をキーとフォームで辞書を作ることです。

    form_class = forms[form_type] 
    

    あなたは新しいフォームを追加するときに辞書を更新するために覚えておく必要がありますが、このソリューションの利点は、フォームクラスのレジストリを作成するよりもずっと簡単であるということです。

    すべてのフォームが同じforms.pyモジュール内にある場合は、getattrを使用する関数を定義してみることができます。

    from myapp import forms 
    
    def get_form_class(form_type): 
        class_name = 'Fund_%s' % form_type 
        # third argument means it returns None by default instead of raising AttributeError 
        return getattr(forms, class_name, None) 
    
    +0

    おかげで。代わりにこれを使うつもりです。 – aldesabido

    +0

    ['modelform_factory'](https://docs.djangoproject.com/ja/1.10/topics/forms/modelforms/#modelform-factory-function)関数がありますが、これがOP – Sayse

    +1

    @sayseはい、モデルのフォームが単純な場合は、フォームクラスを定義する代わりに 'modelform_factory'を使うことができます。ただし、モデル名の検証には注意してください! – Alasdair

    関連する問題