概要
画面(templates)からviews.pyに渡した値を1つずつ代入するのが嫌になりました。
そこで試行錯誤してみたら、そこそこらくちんになったので共有(^ワ^*)
どういうこと?
こういうことです!
# root_directory/app_name/views.py
def new_book(request):
"""本の新規登録"""
form = BookForm(request.POST or None)
if form.is_valid():
book = Book()
book.title = form.cleaned_data['title']
book.author = form.cleaned_data['author']
book.publisher = form.cleaned_data['publisher']
# もう嫌になった!!!!
# なんで1個ずつ代入せなあかんのじゃ!!
# パラメータが10も20もあったらどうすんじゃい!!!
解決策
手抜きもーど_(-ω-`_)⌒)_
ソースコード
# root_directory/app_name/views.py
def new_book(request):
"""本の新規登録"""
form = BookForm(request.POST or None)
if form.is_valid():
# 1行でまとめて代入!!きもちいい!!!
book = Book(**form.cleaned_data)
これでいけました。
周知の事実なのかもしれませんが、記事が見つからなかったので...どなたかの参考になれば幸いです。
補足
ちなみにこの**
は、辞書型データの中身を展開して、
- keyを引数名として
- valueを値として
メソッドに渡すときに使うものです。
# もし以下のようなデータになっていたとすると...
# form.cleaned_data => { 'name': 'name_aaa', 'author': 'ryukishi007' }
# こう書いた場合、
Book(**form.cleaned_data)
# こう書いているのと同じ動作になります。
Book(name='name_aaa', author='ryukishi007')
(知ってたけど初めて役に立った。)