Оформление заказа
После создания корзины, которая показывала, какие товары мы добавили, их цену и их количество, я приступил к реализации страницы оформления заказа, на которую мы уже переходили при нажатии на кнопку "Оформить заказ", расположенную в самой корзине. Как создавать страницу, я уже рассказывал в одной из предыдущих частей, на примере создания страницы товара и витрины. После того, как я создал страницу, там в ход пошла уже обычная верстка, а далее, я уже начал делать вывод товаров из корзины на нашу созданную страницу в виде таблицы. Для этого, в файле views.py я написал код, который у меня доставал все записи из модели "ProductInBasket", которая хранит все данные о товарах в корзине. Сама модель расположена в models.py. Также в файле checkout.html я сделал отрисовку полученных данных на самой странице. Но кроме вывода товаров из корзины, в данном файле была прописана также логика работы страницы, которая позволяла изменять количество товаров, считала стоимость по каждому товару и считала уже итоговую стоимость всего заказа в целом. Помимо этого, если у покупателя нету товаров в корзине, то при переходе на страницу, ему пишет "в корзине нет товаров".
Но это была проделана только половина работы. Основным этапом в данной части является написание back-end части, а именно, необходимо было, чтобы в Django-Admin Panel передавалась вся информация о заказчике, а также информация о самом заказе. И в ходе этой работы, была создана и мигрирована таблица в базу данных (как это делается я уже рассказывал в одной из части), куда, при нажатии на кнопку "Заказать", отправлялась вся информация о заказе и покупателе, а также дата его создания. Результат и сами коды, представлены ниже.
views.py
def checkout(request): session_key = request.session.session_key products_in_basket = ProductInBasket.objects.filter(session_key=session_key, is_active=True) print (products_in_basket) for item in products_in_basket: print(item) form = CheckoutContactForm(request.POST or None) if request.POST: print(request.POST) if form.is_valid(): print("yes") data = request.POST name = data.get("name", "3423453") phone = data["phone"] address = data["address"] email = data["email"] user, created = User.objects.get_or_create(username=phone, defaults={"first_name": name}) order = Order.objects.create(user=user, customer_name=name, customer_phone=phone,customer_address=address,customer_email=email) for name, value in data.items(): if name.startswith("product_in_basket_"): product_in_basket_id = name.split("product_in_basket_")[1] product_in_basket = ProductInBasket.objects.get(id=product_in_basket_id) print(type(value)) product_in_basket.nmb = value product_in_basket.order = order product_in_basket.save(force_update=True) ProductInOrder.objects.create(product=product_in_basket.product, nmb = product_in_basket.nmb, price_per_item=product_in_basket.price_per_item, total_price = product_in_basket.total_price, order=order) return HttpResponseRedirect(request.META['HTTP_REFERER']) else: print("no") return render(request, 'web/checkout.html', locals())
forms.py
class CheckoutContactForm(forms.Form): name = forms.CharField(required=True) phone = forms.CharField(required=True) address = forms.CharField(required=True) email = forms.CharField(required=True)
checkout.html
Результат по checkout.html
Результат в Django-Admin Panel