2017-01-29 7 views
0

私はモデルとフォームに関する2つの質問があります。Python/Django - モデルのためのフォームの生成。

1)モデルの自動フォームを作成する最も良い方法は何ですか?

以下の例では、ModelAとModelBという2つのモデルがあります。 ModelAFormとModelBFormのためのフォームが必要です。それらは自動的に定義する必要があります。私は手動でやりたいとは思わない。将来は他のモデルを追加して、すべてのフォームが同じように見えるからだ。私はモデルのための特別なデコレータを作成し、modelform_factoryを使用することを考えています。

from django.db import models 
from django.forms import ModelForm 

class ModelA(models.Model): 
    ... 

class ModelB(models.Model): 
    ... 

class ModelAForm(ModelForm): 
    class Meta: 
     abstract = ModelA 

class ModelBForm(ModelForm): 
    class Meta: 
     abstract = ModelB 

2)私はModelFormフォームのみを使用していると仮定して、モデルのフォームを見つけることは可能ですか?例。私はModelAとModelBという2つのモデルと、ModelAFormとModelBFormという2つのモデルを持っています。私はModelAのインスタンスを持っており、私はテンプレートに渡すこのモデルの適切なフォーム(この場合はModelAForm)を特定したいと思います。

+1

あなたが広範囲に[Djangoのドキュメント]で説明を求め、すべてを(見つけることができますhttps://docs.djangoproject.com/en/1.10/ref/クラスベースビュー/ジェネリック編集/) – trixn

答えて

1

djangoにはModelFormがあります。 ここにはドキュメンテーションの断片とリンクがあります。あなたはおそらく、あなただけform_classmodelインスタンスを渡すジェネリッククラスベースのビュー、探している https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/

class ArticleForm(ModelForm): 
    class Meta: 
     model = Article 
     fields = ['pub_date', 'headline', 'content', 'reporter'] 

は、他のすべてDjangoはあなたの助けなしで処理します。 彼らのためのリンク - https://docs.djangoproject.com/en/1.10/ref/class-based-views/

+0

私はModelFormがあることを知っています。しかし、あなたの例の基盤上では、記事のベースにArticleFormを自動的に生成したいと思います。 – hakubaa

+0

あなたが得ることができる最大のものは 'fields = '__all __''を指定して、すべてのモデルフィールドのフォームフィールドを自動的に生成することです。 それ以上に、ちょうどdjangoでは不可能です。 –

2

Djangoはを提供しています。モデルを提供するだけで、ビューは自動的にフォームを生成します。インスタンスを作成または更新するためにフォームを使用する場合は、フォームを使用するだけです。

実際にフォームを作成する必要がある場合は、modelform_factoryを使用して、これらのビューが自分自身のモデルに適したフォームを作成することができます。しかし、あなたのニーズに合うように変更できる限り、最初は一般的なビューを使用します。

モデルと必要に応じてフィールドを渡してください。あなたがフィールドを省略すると、すべてのフィールドが生成されます。

from .models import MyModel 
from django.forms.models import modelform_factory 

my_form = modelform_factory(MyModel, fields=['name', 'age', 'job']) 
+0

ありがとうございます。私はすでにmodelform_factoryについて考えてきました。 – hakubaa

関連する問題