python - 为什么我的 Django 电子商务项目为每个订单注册多个订单?
问题描述
我正在通过使用 Django 构建一个简单的电子商务商店来学习 Python。我一直在关注本教程以获得指导。
当我在网站上(在本地主机上)传递订单时,该订单在后端注册了 2 次。即:管理面板中的订单#1、订单#2。
我想知道如何合并两者,因此网站上传递的 1 个订单 = 仪表板上的 1 个订单?
在订单 1 中,字段 complete 设置为 True 并填写 Transaction。
在订单 #2 中,拾取时间和类型均已设置。
模型.py
class Order(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.SET_NULL, blank=True, null=True)
date_ordered = models.DateTimeField(auto_now_add=True)
complete = models.BooleanField(default=False, null=True, blank=False)
transaction_id = models.CharField(max_length=100, null=True)
CHOICES = (('in-store','in-store'),
('curbside','curbside'))
pickup_type = models.CharField(max_length=10, choices=CHOICES)
pickup_time = models.DateTimeField(null=True, blank=False)
视图.py
def store(request):
if request.user.is_authenticated:
customer = request.user.customer
order, created = Order.objects.get_or_create(customer=customer, complete=False)
items = order.orderitem_set.all()
cartItems = order.get_cart_items
else:
items = []
order = {'get_cart_total':0, 'get_cart_items':0, 'shipping':False}
cartItems = order['get_cart_items']
products = Product.objects.all()
context = {'products': products, 'cartItems':cartItems}
return render(request, 'store/store.html', context)
def processOrder(request):
transaction_id = datetime.datetime.now().timestamp()
data = json.loads(request.body)
if request.user.is_authenticated:
customer = request.user.customer
order, created = Order.objects.get_or_create(customer=customer, complete=False)
total = float(data['form']['total'])
order.transaction_id = transaction_id
if total == float(order.get_cart_total):
order.complete = True
print("Order set to complete!!!!")
order.save()
if order.shipping == True:
ShippingAddress.objects.create(
customer=customer,
order=order,
address=data['shipping']['address'],
city=data['shipping']['city'],
state=data['shipping']['state'],
zipcode=data['shipping']['zipcode'],
)
Order.objects.create(
pickup_type=data['pickup']['pickup_type'],
pickup_time=data['pickup']['pickup_time'],
)
else:
print("user is not logged in")
return JsonResponse('Order Processed', safe=False)
如何确保不创建 2 个单独的订单? 谢谢。
解决方案
如果order.shipping == True
您Order
使用Order.objects.create(…)
. 您应该更新现有的order
并将其保存到数据库中:
from django.contrib.auth.decorators import login_required
@login_required
def processOrder(request):
transaction_id = datetime.datetime.now().timestamp()
data = json.loads(request.body)
customer = request.user.customer
order, created = Order.objects.get_or_create(
customer=customer, complete=False
)
total = float(data['form']['total'])
order.transaction_id = transaction_id
if total == float(order.get_cart_total):
order.complete = True
print("Order set to complete!!!!")
if order.shipping:
ShippingAddress.objects.create(
customer=customer,
order=order,
address=data['shipping']['address'],
city=data['shipping']['city'],
state=data['shipping']['state'],
zipcode=data['shipping']['zipcode'],
)
order.pickup_type = data['pickup']['pickup_type']
order.pickup_time = data['pickup']['pickup_time']
order.save()
return JsonResponse({'status': 'Order Processed'})
推荐阅读
- postman - 如何禁用邮递员应用程序的自动更新
- c++ - std::async 线程中的成员变量
- post - Loopback POST 条目数组?
- authentication - 用于登录 Cloud Run (GCP) 上的节点 api 的标头中的 JWT
- node.js - 我是否需要在前端应用程序和 Firebase 数据库之间再增加一层安全性?
- c# - 来自 Excel 工作表的 C# 变量
- python - Safari 中的文本框没有从 Selenium+Python 脚本中获取整个字符串
- c# - 如何使用 Mapster 映射自引用?
- python - 我正在尝试在输出之间添加空格,我该怎么办?
- android - (WINDOWS 10)模拟器:模拟器:错误:VkCommonOperations.cpp:496:无法创建 Vulkan 实例