DjangoFormWizardを使用して既存のオブジェクトを編集しようとしています。このブログ投稿で説明されている手法に従っていますが、機能しません。これが私の編集ビューです:
@login_required
def edit_wizard(request, id):
thing = get_object_or_404(Thing, pk=id)
if thing.user != request.user:
raise HttpResponseForbidden()
else:
initial = {0: {'year': thing.year,
'make': thing.make,
'series': thing.series,
....etc.
},
1: {'condition': thing.condition,
....etc.
},
}
form = CreateWizard.as_view([StepOneForm, StepTwoForm, StepThreeForm], initial_dict=initial)
return form(context=RequestContext(request), request=request)
ユーザーがオブジェクトを編集できるように、ウィザードに初期データを提供する方法を理解するのを手伝ってもらえますか?あなたのアイデアをありがとう!
編集:(2/18/13)
取得していた:
TypeError at /edit/10/ __init__() takes exactly 1 argument (3 given)
これは以下の@sneawoの回答によって解決されましたが、それでも初期データは渡されず、ウィザードは代わりに新しいオブジェクトを作成します。
編集:(2/19/13)
class CreateWizard(SessionWizardView):
file_storage = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT))
def done(self, form_list, **kwargs):
instance = Thing()
for form in form_list:
for field, value in form.cleaned_data.iteritems():
setattr(instance, field, value)
instance.user = self.request.user
instance.save()
return render_to_response('wizard-done.html', {
'form_data': [form.cleaned_data for form in form_list],
})