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とともにリダイレクトする。


こんな感じかな!また新しくやることがあればこの次のブログでやったるぜ!