比方說,我有這些模型一個簡單的購物車系統,因爲他們訂購的每個產品創建一個OrderItem
對象詮釋總和,同時仍然能夠訪問異物
from django.db import models
from django.utils import timezone
class Product(models.Model):
name = models.CharField(max_length=255)
# More fields...
@property
def featured_image(self):
try:
return self.productimage_set.all()[0]
except IndexError:
return None
def __str__(self):
return self.name
class ProductImage(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
image = models.FileField(upload_to='products/')
# More fields...
def __str__(self):
return self.product.name
class Order(models.Model):
created = models.DateTimeField(default=timezone.now)
# More fields...
def __str__(self):
return str(self.pk)
class OrderItem(models.Model):
order = models.ForeignKey(Order, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.PositiveIntegerField()
# More fields...
def __str__(self):
return 'Order %s: %s of %s' % (
self.order_id,
self.quantity,
self.product.name,
)
當用戶下訂單, ,它讓我知道(1)他們購買了哪種產品,以及(2)他們購買了多少產品。
現在,假設我想向用戶展示他們訂購了哪些產品。我將使用該數據作爲一個例子:
Order 1:
Product A: 10
Order 2:
Product A: 10
Product B: 5
Order 3:
Product A: 10
Product B: 5
Product C: 5
此特定用戶應顯示的產品的順序:
Product A: 30 total
Product B: 10 total
Product C: 5 total
這是實現這的代碼:
order_items_by_quantity = OrderItem.objects.values(
'product__name',
).annotate(
total_purchased=Sum('quantity'),
).order_by(
'-total_purchased',
)
for order_item in order_items_by_quantity:
print(order_item)
但是用這種方法,我不能使用order_item.product.featured_image
。有沒有辦法讓我擁有這兩件事?也就是說,所有的數量總計和從大多數訂購到至少和使用order_item.product.featured_image
的能力。