0

'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()が上記のエラーで失敗します。

4

1 に答える 1

1

edit_person.htmlテンプレートには何が含まれていますか?POSTターゲットURLがハードコーディングされており、間違ったビューに設定されていますか?

たとえば、PersonForm_NameOnlyフォームが誤って送信されているのですかedit_person_birthday、それともPersonForm_BirthdayOnlyフォームがedit_person_name誤って送信されているのですか?

于 2012-08-19T23:38:07.887 に答える