В настоящее время я создаю веб-сайт для электронной коммерции на основе изображений.
Изображения помечены некоторыми продуктами, и мне нужно получать общий доход от продажи продуктов, помеченных на каждом изображении.
"""
models.py
"""
class Image(AbstractImageModel):
"""
Images are linked to Product model via intermediary ProductInImage table.
"""
...
products = models.ManyToManyField(
"catalogue.Product", through="ProductInImage", related_name="listed_images"
)
...
class ProductInImage(TimeStampedModel):
"""
Intermediary model that connects Image with Products
"""
image = models.ForeignKey("images.Image", models.CASCADE)
product = models.ForeignKey("catalogue.Product", models.CASCADE)
class OrderLine(models.Model):
"""
An order line
"""
order = models.ForeignKey(
'order.Order',
on_delete=models.CASCADE,
related_name='lines',
verbose_name=_("Order"))
...
product = models.ForeignKey(
'catalogue.Product', on_delete=models.SET_NULL, blank=True, null=True,
verbose_name=_("Product"))
quantity = models.PositiveIntegerField(_("Quantity"), default=1)
...
line_price = models.DecimalField(_("Line Price"), decimal_places=2, max_digits=12)
Я пытаюсь получить набор запросов Image.objects, аннотированный общим доходом от всех продуктов, помеченных на каждом изображении.
Я делал что-то похожее на следующие строки, но, похоже, не могуприступить к работе.
# to use in subquery
line_qs = OrderLine.objects \
.filter(product__id__in=OuterRef("product_pk")) \
.values("line_price") \
.annotate(revenue=Sum("line_price"))
# queryset that I need: must be annotated with revenue made from all products, for each image
qs = Image.objects.all()
qs = qs.annotate(revenue=Subquery(line_qs.values("revenue")))
Большое спасибо заранее;Я очень ценю вашу помощь.