我有一個方法可以從用戶的購物車中創建訂單。為了讓快遞員從不同的餐廳取走一份訂單,該訂單被分成若干份。但目前我只是按照購物車中的菜品來分割訂單。如何使訂單按餐廳分割?也就是說,如果一個用戶從兩個不同的餐廳點了5個菜,那么就形成了兩個訂單。
views.py
@action(methods=['PUT'], detail=False, url_path='current_customer_cart/add_to_order'>)
def add_cart_to_order(self, *args, **kwargs)。
cart = Cart.objects.get(owner=self.request.user.customer)
cart_meals = CartMeal.objects.filter(cart=cart)
data = self.request.data
for cart_meal in cart_meals:
order = Order.objects.create(customer=self.request.user.customer,
cart_meal=cart_meal,
first_name=data['first_name']。
last_name=data['last_name']。
phone=data['phone']。
address=data.get('address', self.request.user.customer.home_address)。
restaurant_address=cart_meal.mean.restaurant.address。
)
Order.save()
return response.Response({"detail"/span>: "訂單已創建", "添加"。True})
models.py
class Order(models.Model)。
""用戶的訂單""
customer = models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='related_orders')
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
phone = models.CharField(max_length=20)
cart_meal = models.ForeignKey(CartMeal, on_delete=models.CASCADE, null=True, blank=True)
restaurant_address = models.CharField(max_length=1024, null=True)
地址 = models.CharField(max_length=1024)
status = models.CharField(max_length=100, choices=STATUS_CHOICES, default=STATUS_NEW)
created_at = models.DateTimeField(auto_now=True)
delivered_at = models.DateTimeField(null=True, blank=True)
courier = models.OneToOneField('Courier', on_delete=models.SET_NULL, null=True, blank=True)
class CartMeal(models.Model)。
"""Cart Meal"""
user = models.ForeignKey('Customer', on_delete=models.CASCADE)
cart = models.ForeignKey('Cart', verbose_name='Cart', on_delete=models.CASCADE, related_name='related_meals')
meal = models.ForeignKey(Meal, verbose_name='Meal', on_delete=models.CASCADE)
qty = models.IntegerField(default=1)
final_price = models.DecimalField(max_digits=9, decimal_places=2)
class Meal(models.Model)。
"""Meal"""
title = models.CharField(max_length=255)
description = models.TextField(default='description will be later')
價格 = models.DecimalField(max_digits=9, decimal_places=2)
discount = models.IntegerField(default=0)
restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE, null=True)
slug = models.SlugField(unique=True)
class Restaurant(models.Model)。
"""Restaurant"""
name = models.CharField(max_length=255)
slug = models.SlugField(unique=True)
地址 = models.CharField(max_length=1024)
owner = models.ForeignKey('Restaurateur', on_delete=models.CASCADE, null=True)
meals = models.ManyToManyField('Meal', related_name='related_restaurant', blank=True)
我如何才能做到這一點,請幫助我
uj5u.com熱心網友回復:
你可以根據餐廳的情況對你的餐點進行分組。
import itertools
from core.models import CartMeal, Order
for restaurant, cart_meals in itertools.groupby(CartMeal.objects.order_by(' meal__restaurant'), lambda s: s.meat.restaurant) 。
order = Order.objects.create(
customer=self.request.user.customer。
first_name=data['first_name']。
last_name=data['last_name']。
phone=data['phone']。
address=data.get('address', self.request.user.customer.home_address)。
restaurant_address=cart_meal.mean.restaurant.address。
)
order.cart_meal.set([cart_meal for cart_meal in cart_meals] )
參考:本答案是在以下答案的幫助下制定的。
https://stackoverflow.com/a/57897654/14005534
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/323533.html
標籤:
