I am trying to achieve an order system for an e-commerce site with Django. I have Order Model and OrderItem Model as such
class OrderItem(models.Model):
product = models.ForeignKey(Product, on_delete=models.SET_NULL, null=True)
is_ordered = models.BooleanField(default=False)
owner = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
date_added = models.DateTimeField(auto_now=True)
date_ordered = models.DateTimeField(null = True)
def __str__(self):
return self.product.name
class Order(models.Model):
ref_code = models.UUIDField(default=uuid.uuid4, editable=False)
items = models.ManyToManyField(OrderItem)
owner = models.ForeignKey(Profile, on_delete=models.SET_NULL, null=True)
is_ordered = models.BooleanField(default=True)
date_ordered = models.DateTimeField(auto_now=True)
shipping = models.ForeignKey(AddressAndInfo, on_delete=models.SET_NULL, null=True)
is_shipped = models.BooleanField(default=False)
price = models.FloatField(default=0.0)
And My view function is such:
def checkout(request):
order_items = OrderItem.objects.filter(
owner=request.user).filter(is_ordered=False).all()
address = AddressAndInfo.objects.filter(user=request.user).get()
if(order_items.count() > 0):
total = 0
for item in OrderItem.objects.filter(owner=request.user).filter(is_ordered=False).all():
if item.product.discounted_price > 0:
total = total + item.product.discounted_price
else:
total = total + item.product.price
order = Order.objects.create(
owner = Profile.objects.get(user= request.user.id),
shipping = address,
price = total
)
new = Order.objects.get(items = None)
print(new.ref_code)
new.items.add(OrderItem.objects.get(owner=request.user, is_ordered=False))
for item in order_items:
item.is_ordered = True
item.save()
return redirect('dash')
else:
messages.success(request, 'No item in Cart')
return redirect('index')
Now the problem here is that when I try to add the second order from the user it adds order-item from the second order to all the existing order and. The result is that all the orders have same order-items. when ever I try to add order new order the order-item from the new order gets added to all existing orders.