Djangoで社内受発注システムアプリ作成 16日目 zip関数~
formでPOSTされたデータをrequest.POSTで取得したのですが、やりたいことを実現しようとするとこのデータがなかなか扱いづらい。
zip関数を使うと扱いやすくなります。
苦労したので覚書として残しておきます。
実現したいことはこんな感じ。
発注数を入力して送信。
(単価はhtmlでhiddenを使って表示させていません)
発注数に入力があるもののみを単価金額を加え表示。
まずはそれぞれのカラムをrequest.POSTからgetlist関数を使ってリストで取得。
商品名 product_names = request.POST.getlist('product_name')
発注数 qtys = request.POST.getlist('qty')
単 価 unit_prices = request.POST.getlist('unit_price')
zip関数を使いそれぞれのリストをひとまとめにする。
posts_all = ( zip product_names, qtys, unit_prices)
postsという空のリストを作り、
発注数が空欄でない場合は、そのリストに追加する。合わせて金額(qtys*unit_prices)も追加。
posts = []
posts_all = zip( product_names, qtys, unit_prices)
for product_names, qtys, unit_prices, in posts_all :
if qtys != "" :
posts.append(( product_names, int(qtys), int(unit_prices), int(qtys)*int(unit_prices)))
ちなみにpostsはこうなります。
[( '商品C', 4, 1000, 4000), ( '商品F', 5, 2000, 10000)]
qtys,unit_pricesは金額の計算をさせるためint()で数値型に変換します。
これをHTMLでfor文を使ってまわせば完成。