【发布时间】:2020-01-22 06:49:03
【问题描述】:
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'),
一切正常。当我运行perform_create API 时,它会检查是否存在现有的created 订单,如果有则将OrderItem 添加到items,否则它将创建一个订单。所以我的问题是当用户付款并且Order.status 更改为ordered 时,我将如何获取订购的商品和购物车商品。
所以我想我应该为每个OrderItem 创建一个订单,然后如果订单完成,它会将Order.status 更改为ordered,否则它将是created。这样我会将created 提取到购物车,将ordered 提取到Ordered page。有什么建议,关于我如何增强这种逻辑?
【问题讨论】:
标签: django python-3.x django-rest-framework