Djangoで社内受発注システムアプリ作成 16日目 zip関数~

formでPOSTされたデータをrequest.POSTで取得したのですが、やりたいことを実現しようとするとこのデータがなかなか扱いづらい。
zip関数を使うと扱いやすくなります。
苦労したので覚書として残しておきます。

実現したいことはこんな感じ。
発注数を入力して送信。
(単価はhtmlでhiddenを使って表示させていません)

画像1

発注数に入力があるもののみを単価金額を加え表示。

画像2


まずはそれぞれのカラムを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文を使ってまわせば完成。




いいなと思ったら応援しよう!