ほんじゃらねっと

ダイエット中プログラマのブログ

Djangoのnewformsでformオブジェクトからモデルオブジェクトにユーザ入力データをコピーする

周知の事実なのかもしれないが、
ユーザ入力が格納されたフォームオブジェクトをsaveする前に
システム側でデータを追加したい場合、フォームオブジェクトの値を
直接変更することができなかったので、フォームオブジェクトに格納された
入力データをモデルオブジェクトにコピーする方法を探したらあった。


views.py

...
def company_create(request):
if request.method == "POST":
CompanyForm = form_for_model(Company)
form = CompanyForm(request.POST)
if form.is_valid():
company = Company(**form.cleaned_data) #ここ
new_code = CodeManager().next('Company', 6)
company.code = new_code
company.save()
return HttpResponseRedirect('/company/list/')
else:
return render_to_response('company/new.html', {'form': form})
return HttpResponseRedirect('/company/new/')
...


簡単な方法が用意されていた。
マニュアル読んで見つからなかったらソースを読もう。