I am learning Python by building a simple e-commerce store using Django. I've been following this tutorial for guidance.
When I pass an order on the site (on localhost), the order is registered 2 times in the backend. Ie: Order #1, Order #2 in the admin panel.
I am wondering how I can merge both so 1 order passed on the site = 1 order on the dashboard?
In order 1, the field complete is set to True and the Transaction is filled.
In order #2, the Pickup time & Type are both set.
Models.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)
View.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)
How can I make sure I don't create 2 separate orders? Thanks.

