models.py:
class OrderItem(models.Model):
image_number = models.CharField(max_length=20)
title = models.CharField(max_length=20)
image_url = models.URLField(max_length=200,null=True,blank=True)
image_size = models.CharField(max_length=50)
file_type = models.CharField(max_length=20)
price = models.CharField(max_length=50)
def __str__(self):
return self.title
class Order(models.Model):
order_status = (
('created','created'),
('processing','processing'),
('orderd','orderd')
)
user = models.ForeignKey(CustomUser, on_delete=models.CASCADE, blank=True,null=True)
items = models.ManyToManyField(OrderItem)
order_status = models.CharField(choices=order_status,null=True,max_length=50)
start_date = models.DateTimeField(auto_now_add=True)
ordered_date = models.DateTimeField(auto_now_add=False,blank=True,null=True)
views.py:
class AddtocartView(generics.CreateAPIView):
authentication_classes = []
permission_classes = []
pagination_class = None
queryset = OrderItem.objects.all()
serializer_class = AddtocartSerializers
def perform_create(self,serializer):
new_order_item = serializer.save()
user=CustomUser.objects.filter(id=self.kwargs['customer_id']).first()
try:
orders_list = Order.objects.get(user=user)
orders_list.items.add(new_order_item)
except Order.DoesNotExist:
order = Order.objects.create(user=user)
order.items.add(new_order_item)
def __str__(self):
return str(self.user)
urls.py:
path('customer/<int:customer_id>/addtocart/',views.AddtocartView.as_view(),name='addtocart'),
path('customer/<int:customer_id>/cart/',views.CartView.as_view(),name='cart'),
![enter image description here](https://i.stack.imgur.com/oSXFU.png)
Все работает нормально. когда я запускаю perform_create
API, он проверяет, существует ли существующий ордер created
и, если он есть, добавляет OrderItem
к items
, иначе он создаст ордер. Поэтому моя проблема в том, что когда пользователь делает платеж, а Order.status
меняется на ordered
, то как я собираюсь получить заказанные товары и товар в корзине. Поэтому я подумал, что должен создать заказ для каждого OrderItem
, тогда, если заказ будет выполнен, он изменит Order.status
на ordered
, в противном случае это будет created
. Таким образом я получу created
в корзину и ordered
в Заказанную страницу . Любое предложение о том, как я могу улучшить эту логику c?