python - 如何在 django 中呈现立即购买视图?
问题描述
我正在建立一个电子商务网站。我有结帐功能,允许用户购买产品。我已经为购物车做到了这一点,当用户将产品添加到购物车中时,他才能购买产品。但我想添加一个功能,允许用户从 product_detail 页面购买单个产品,因此无需将产品添加到购物车,他就可以购买。所以问题是,我想在我的结帐页面上做单品。但有些产品来自购物车。如何允许用户购买产品而不将其添加到购物车中?
这是views.py 文件:
def checkout(request):
user = request.user
address = Customer.objects.filter(user=user)
cart_items = Cart.objects.filter(user=user)
amount = 0
shipping_amount = 70
cart_product = [p for p in Cart.objects.all() if p.user == user]
if cart_product:
for p in cart_product:
temp_amount = (p.quantity * p.product.discounted_price)
amount += int(temp_amount)
total_amount = amount + shipping_amount
return render(request, 'app/checkout.html', {'address':address,
'cart_items':cart_items, 'total_amount':total_amount,
'amount':amount})
这是结帐模板:
{% extends 'app/base.html' %}
{% load static %}
{% block title %}Checkout{% endblock title %}
{% block main-content %}z
{% load humanize %}
<div class="container">
<div class="row mt-5">
<div class="col-sm-6">
<h4>Order Summary</h4>
<hr>
{% for cart in cart_items %}
<div class="card mb-2">
<div class="card-body">
<p class="font_weight">Product: {{cart.product.title}}</p>
<p>Quantity: {{cart.quantity}}</p>
<p class="font_weight">Price: {{cart.total_cost|intcomma}}</p>
</div>
</div>
{% endfor %}
<p class='mx-2 fw-bold'>Total Cost + Rs.70 = {{total_amount|intcomma}}.</p>
<small><span class='fw-bold'>Terms and Conditions:</span> Lorem ipsum dolor sit amet consectetur adipisicing elit. Mollitia, ullam saepe! Iure optio repellat dolor velit, minus rem. Facilis cumque neque numquam laboriosam, accusantium adipisci nisi nihil in et quis?</small>
</div>
<div class="col-sm-4 offset-sm-1">
<h4>Select Shipping Address :</h4>
<hr>
<form action="/payment_done/">
{% for add in address %}
<div class="card">
<div class="card-body">
<h5>{{add.name}}</h5>
<p>{{add.locality}}, {{add.city}}, {{add.state}} - {{add.zipcode}}.</p>
</div>
</div>
<div class="form-check mt-2 mb-5">
<input class="form-check-input" type="radio" name="custid" id="custadd{{forloop.counter}}" value="{{add.id}}" required>
<label class="form-check-label fw-bold" for="custadd{{forloop.counter}}">
Address: {{forloop.counter}} </label>
</div>
{% endfor %}
<div class="text-end">
<button type="submit" class="btn btn-warning mt-3 px-5 fw-bold">Continue</button>
</div>
</form>
</div>
</div>
</div>
{% endblock main-content %}
这是models.py:
class Product(models.Model):
title = models.CharField(max_length = 100)
selling_price = models.DecimalField(max_digits=15, decimal_places=2)
discounted_price = models.DecimalField(max_digits=15, decimal_places=2)
description = models.TextField()
brand = models.CharField(max_length = 100)
category = models.CharField(choices = CATEGORY_CHOICES, max_length = 3)
product_image = models.ImageField(upload_to='productimg')
def __str__(self):
return str(self.id)
@property
def save_amount(self):
return self.selling_price - self.discounted_price
class Cart(models.Model):
user = models.ForeignKey(User, on_delete= models.CASCADE)
product = models.ForeignKey(Product, on_delete= models.CASCADE)
quantity = models.PositiveIntegerField(default=1)
def __str__(self):
return str(self.id)
@property
def total_cost(self):
return self.quantity * self.product.discounted_price
解决方案
推荐阅读
- react-native - 将参考文献转发到 Navigator react-navigation
- model - 如何在sas的proc reg中逐步选择的所有选择模型中添加t统计值?
- laravel - 与所有视图共享数据,最佳实践
- python - 如何使用 pandas.dataframe.where() 更改值?
- c++ - 如何在 MSVC 2019 中的 CMake 管理的 C++ 项目中将命令行启动参数添加到发布目标?
- delphi - Delphi将base64字符串转换为PNG图像
- javascript - 不返回真
- c++ - 我需要哪些 DLL 和库才能使用“timeBeginPeriod”或“timeapi.h”的其他部分?
- ruby-on-rails - Rspec 种子作业在模型验证后运行
- python - tqdm 将我的程序减慢了至少 8 倍