汎用ビューとモデルの形のこの機能を使用する方法を理解したいと思います。 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'),
)
ありがとうございました。したがって、モデル・フォームを汎用ビューに渡すことができます。 – Shri
テンプレートのフィールドレイアウトをカスタマイズする方法は?カスタムスタイルに似ています。 – Shri
カスタムModelFormsをCBVに渡すための更新を参照してください。 Djangoテンプレート言語でフィールドをカスタマイズします。それは大きな話題ですが、多くの良いチュートリアルがあります。フォームのフィールド{%%フォームのフィールド%}