Получение двух значений из одного и того же аннотационного запроса

У меня есть две связанные модели:

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. Как мне поступить в этом случае?

Вернуться на верх