2015-04-23 108 views
0

我使用Django 1.7和REST framework,。我想更新購物車實例,然後創建新的訂單實例。Django從其他模型更新對象

#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轉換爲訂單。 有沒有更好的方法來實現這一目標?

回答

0

您可以手動創建訂單和更新後的車,這樣的事情:

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)