2016-11-11 27 views
0

私はDjangoを初めて使用しています。 モデルを受け入れてそこからフォームを作成する一般的な作成ビューを作成したいが、ビューにURLパラメータとして渡されたモデルにモデル属性を設定する方法がわからない。Django - CreateViewにモデルを渡す方法

urls.py:

url(r'^(?P<model>\w+)/new$', views.ModelCreate.as_view(), name='new-record') 

views.py:事前に助けを

class ModelCreate(CreateView): 
    model = ??? 

    fields = [] 
    for field in model._meta.get_fields(): 
     fields.append(field.name) 

    template_name = 'new_record.html' 

ありがとう!

答えて

0

まず、POSTまたはGETのどちらかを使ってフォームを作成しようとしているモデルで渡す必要のあるモデルのモデルフォームを作成するための汎用ビューを作成します。

次に、フォームを作成するモデルを正しい場所に設定する必要があります。 DjangoのCreateViewを調べると、親クラスModelFormMixinにget_form_class()メソッドがあることがわかります。あなたのModelCreateクラス内でこのメソッドをオーバーライドし、そのモデルをそこから渡した変数から設定します。ご覧のとおり、このメソッドはモデルからフォームを作成します。

def get_form_class(self): 
    """ 
    Returns the form class to use in this view. 
    """ 
    if self.fields is not None and self.form_class: 
     raise ImproperlyConfigured(
      "Specifying both 'fields' and 'form_class' is not permitted." 
     ) 
    if self.form_class: 
     return self.form_class 
    else: 
     if self.model is not None: 
      # If a model has been explicitly provided, use it 
      model = self.model 
     elif hasattr(self, 'object') and self.object is not None: 
      # If this view is operating on a single object, use 
      # the class of that object 
      model = self.object.__class__ 
     else: 
      # Try to get a queryset and extract the model class 
      # from that 
      model = self.get_queryset().model 

     if self.fields is None: 
      raise ImproperlyConfigured(
       "Using ModelFormMixin (base class of %s) without " 
       "the 'fields' attribute is prohibited." % self.__class__.__name__ 
      ) 

     return model_forms.modelform_factory(model, fields=self.fields) 
関連する問題