'ModelForm'クラス(インスタンスではない)をパラメーターとして渡すことにより、以下の'edit'ビューを再利用したいと思います。簡略化されたコードは次のとおりです。
def edit(request, id, form_class):
person = get_object_or_404(Person, pk=id)
if not request.method == 'POST':
form = form_class(instance=person)
else:
form = form_class(request.POST, instance=person)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse(show_person), args=(id,))
return render_to_response('edit_person.html', {'form' : form, context_instance=RequestContext(request))
def edit_person_name(request, id):
return edit(request, id, PersonForm_NameOnly)
def edit_person_birthday(request, id):
return edit(request, id, PersonForm_BirthdayOnly)
PersonForm_NameOnly
および'PersonForm_BirthdayOnly'は、から継承するフォームクラスModelForm
です。
残念ながら、上記は検証されませんが、いくつかの必須フォームフィールドが欠落しているというエラーが発生します。ただし、form_class
変数を使用する代わりに、代わりにクラス名を直接使用する場合(PersonForm_NameOnly
またはPersonForm_BirthdayOnly
)、すべてが正常に機能します。
誰かが私が間違っていることを知っていますか?
編集:私が得るエラーはフォーム検証エラーです:「このフィールドは必須です。」
これは、'Person'モデルに必須のフィールドがあり、何らかの理由で設定されていないためです: "form = form_class(request.POST、instance = person)"
これにより、フォームをテンプレートに表示すると、form.is_valid()が上記のエラーで失敗します。