Получение двух значений из одного и того же аннотационного запроса
У меня есть две связанные модели:
class ProductSKUs(BaseModel):
STATES = [(1, "New"), (2, "Open Box"), (3, "Refurbished")]
shop_id = models.SmallIntegerField(default=1, blank=True, verbose_name="Shop ID")
sku = models.IntegerField(verbose_name="SKU")
product_id = models.ForeignKey(
"Products",
on_delete=models.CASCADE,
)
state = models.SmallIntegerField(choices=STATES, default=1, null=True, verbose_name="State")
featured = models.BooleanField(default=False, blank=True)
class ProductOffers(BaseModel):
sku = models.ForeignKey(
"ProductSKUs",
on_delete=models.CASCADE,
db_column="product_sku_id",
related_name="product_offers",
related_query_name="product_offer",
)
price = models.FloatField()
price_promo = models.FloatField(
null=True, blank=True, verbose_name="Promotional Price"
)
Я пытаюсь получить набор запросов ProductSKUs с правильными значениями shop_id, а затем также получить price и price_promo из ProductOffers с наименьшим значением price_promo. Я попробовал следующий набор запросов, но проблема в том, что мне нужны одинаковые price и price_promo из одного товарного предложения, но он получает значения из двух разных объектов.
featured_product_skus = (
ProductSKUs.objects.filter(shop_id=1, featured=True)
.select_related("product_id")
.prefetch_related("product_offers")
.annotate(
min_price_promo=Min("product_offer__price_promo"),
min_price=Min("product_offer__price"),
)
)
Так, если один ProductOffer имеет price = 500 и price_promo = 2000, а другой ProductOffer имеет price = 100 и price_promo = 3000, он будет аннотировать min_price = 100 и price_promo = 2000, тогда как я хочу price = 100 и price_promo = 3000. Как мне поступить в этом случае?