1
我想通過訂單模型獲得餐廳的電子郵件。我怎樣才能做到這一點呢?
我的 models.py:
class Order(models.Model)。
cart_meal = models.ManyToManyField(CartMeal, null=True, blank=True)
class CartMeal(models.Model)。
meal = models.ForeignKey(Meal, verbose_name='Meal', on_delete=models.CASCADE)
class Meal(models.Model)。
restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE, null=True)
class Restaurant(models.Model)。
email = models.EmailField()
我需要通過訂單來獲取餐廳.電子郵件。我試著這樣做,但它不作業。order.cart_meal.model.mean.restaurant.email
我是這樣獲得訂單的。
我是這樣得到訂單的 views.py
@action(methods=['PUT'/span>], 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 restaurant, cart_meals in itertools.groupby(CartMeal.objects.filter(cart=cart).order_by('mean__restaurant'),
lambda s: s.mean.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) 。
)
order.cart_meal.set([cart_meal for cart_meal in cart_meals] )
cooking_meal_notification(**restaurant_email=???**)
在呼叫最后一個方法cooking_meal_notification時,我需要得到餐廳的電子郵件
sender.py
def cooking_meal_notification(restaurant_email, meal)。
send_mail(
'已收到一個訂單'。
餐點。
'[email protected]'。
[餐廳_郵件]。
fail_silently=False。
)
uj5u.com熱心網友回復:
可以有多個Restaurants,因為一個Order可以包含多個由不同的Restaurants制作的餐點。
你可以通過以下方式檢索相關的Restaurants的QuerySet:
Restaurant.objects.filter(
飯菜的順序=訂單
).distinct()
因此,我們可以用以下方法檢索這些Restaurants的電子郵件地址:
Restaurant.objects.filter(
膳食__食品__訂單=訂單
).values_list('email', flat=True).distinct()
這樣就產生了一個與該訂單相關的Restaurants的電子郵件地址的遍歷。
例如,你可以用它來呼叫一個類似cooking_meal_notification的函式:
qs = Restaurant.objects.filter(
膳食__食品__訂單=訂單
).values_list('email', flat=True).distinct()
for email in qs:
cooking_meal_notification(email)
你也可以處理作為Order"成員 "的Meal:
qs = Meal.objects.filter(
cartmeal__order=order
).select_related('restaurant')
for meal in qs:
cooking_meal_notification( meal.restaurant.email, meal)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/323514.html
標籤:
