繁体   English   中英

Django Rest从其他模型更新对象

[英]Django rest update object from other model

我将Django 1.7与REST框架配合使用。 我想更新购物车实例,然后创建订单的新实例。

#models.py

class Cart(models.Model):
  to_be_deleted = models.BooleanField(default=False)
  ...

class Order(models.Model):
  ...

#views.py
class OrderBuyList(generics.ListCreateAPIView):
    serializer_class = OrderBuySerializer

def create(self, request, *args, **kwargs):
    data = request.data
    # First mark cart instance to be deleted and then create an order instance
    # Request can come from cart.
    cart = Cart.objects.filter(id=data['id'],user_id=data['user_id'])
    if cart:
        cart[0].to_be_deleted = True
        cart[0].save()
    return generics.ListCreateAPIView.create(self, request, *args, **kwargs)

我觉得这不是编写此逻辑的最佳方法。 因为可能发生以下情况,所以购物车已更新且未创建订单实例。 然后,我不知道该如何将哪个购物车not转换为订单。 有没有更好的方法来实现这一目标?

您可以手动创建订单并在此之后更新购物车,如下所示:

def create(self, request, *args, **kwargs):
    data = request.data
    cart = Cart.objects.get(id=data['id'],user_id=data['user_id'])
    serializer = self.get_serializer(data=data)
    serializer.is_valid(raise_exception=True)
    order = Order.objects.create(**serializer.validated_data)
    cart.to_be_deleted = True
    cart.save()
    headers = self.get_success_headers(serializer.data)
    return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM