2016-06-27 12 views
0

私はDjangoを学習しています。Django:ModelFormと汎用ビューの使い方

Model FormGeneric Viewsの使用については少し混乱しました。両方ものの

は異なりますが、私は何を理解することは、両方のは、私がアイデア、好き、コメントやタグを格納するための異なるテーブルを持っているmodel class

与えに従ってform生成することができます。

私はmodel formまたはgeneric viewsを使用して、ユーザーや好きなやコメントからアイデアを得るべきかどうか。

私のフォームのレイアウトもカスタマイズしたいので、私にとっては何が良い方法ですか?

私は排他的な概念ではありませんdjango

答えて

1

汎用ビューとモデルの形のこの機能を使用する方法を理解したいと思います。 ModelFormsはモデルのロジックからフォーム、検証/データクリーニングロジック、CRUD機能を作成しますが、一般的なビューは特定の関数のビジネスロジックを含むように作られています。

以下の例(docs)では、UpdateView(Djangoの一部として提供される一般的なビュー)は、単一のモデルインスタンスからモデルフォームを作成します。 CBVの規約により、更新されるインスタンスの主キーは、URLによって提供される最初の位置引数として期待されます。

この場合、ModelFormが自動的に生成されます。より細かい制御が必要な場合は、独自のModelFormを定義してCBVに渡すことができます。うまくいけば、これはあなたの混乱をクリアするのに役立ちます。

例myappに/ views.py:

from django.views.generic.edit import UpdateView 
from myapp.models import Author 
from django import forms 


class MyModelForm(forms.ModelForm): 
    model = Author 
    fields = ['name', 'city', ...] 


class AuthorUpdate(UpdateView): 
    model = Author 
    form = MyModelForm 
    template_name_suffix = '_update_form' 

例myappに/ author_update_form.html:

<form action="" method="post">{% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" value="Update" /> 
</form> 

例myappに/ urls.py

from django.conf.urls import * 
from myapp.views import AuthorUpdate 

urlpatterns = patterns('', 
    url('^update_author/(?P<pk>[\w-]+)$', AuthorUpdate.as_view(), name='update_author'), 
) 
+0

ありがとうございました。したがって、モデル・フォームを汎用ビューに渡すことができます。 – Shri

+0

テンプレートのフィールドレイアウトをカスタマイズする方法は?カスタムスタイルに似ています。 – Shri

+0

カスタムModelFormsをCBVに渡すための更新を参照してください。 Djangoテンプレート言語でフィールドをカスタマイズします。それは大きな話題ですが、多くの良いチュートリアルがあります。フォームのフィールド{%%フォームのフィールド%}

{{ field }}
{%endfor%}をループするか、{{form.author}}という名前でフォームから1つのフィールドを呼び出します。 –

関連する問題