Day13 session 辞書
"""bag sessionのイメージ""" session = { 'bag':{ '1': 5, '4': 3, '10': 6, } } # forms.py class AddToBagForm(forms.Form) num = forms.IntegerField( label = '数量', min_value = 1, required=True, ) # views.py """セッションのところだけ取り出す。""" def detail(request, product_id): product = get_objects_or_404(Product, pk=product_id) add_to_bag_form = AddToBagForm(request.POST or None) if add_to_bag_form.is_valid(): num = add_to_bag_form.cleaned_data['num'] if 'bag' in request.session: if str(product_id) in request.session['bag']: request.session['bag'][str(product_id)] += num else: request.session['bag'][str(product_id)] = num else: request.session['bag'] = {str(product_id): num} messages.success(request, f"{product.name}を{num}個買い物カゴにはいってるよ") return redirect('app:detail', product_id=product_id) context = { 'product':product, 'add_to_bag_form':add_to_bag_form, } return render(request, 'app/detail.html', context)
構造:
フォームが有効なら
numに数量というデータを入れる。
1.バッグがセッションに存在するなら
2.product_idというキーがbagというセッションの中に既に存在するなら
bagというセッションの中にあるproduct_idのキーの数量をnum分増加
2.product_idというキーがbagというセッションの中に既に存在しないなら
bagというセッションの中に新しくproduct_idのキーを追加する
1.バッグがセッションに存在しないなら
新しく'bag'というセッションのキーを追加する
3.views.pyのdetailにproduct_idとともにリダイレクトする。
こんな感じかな!また新しくやることがあればこの次のブログでやったるぜ!