Django. Выбрать только один связанный объект с наименьшей ценой

models.py

class Product(models.Model):
    ...


class ProductVariant(models.Model):
    product = models.ForeignKey(Product)
    price = models.DecimalField()
    ...

Как одним запросом выбрать Product и связанный с ним ProductVariant, но только один и с наименьшей ценой?

views.py

class ProductList(generic.ListView):
    model = Product

template

{% for product in product_list %}
<div class="product-card">
    {{ product.name }}
    <!--
        Вот тут хотелось бы иметь доступ к варианту товара,
        при этом не генерировать множество запросов.
    -->
    {{ product.variant.price }}
    {{ product.variant.color }}
</div>
{% endfor %}

Ответы (1 шт):

Автор решения: Za Ars

Попробуйте так

class ProductVariant(models.Model):
    ...
    class Meta:
        ordering = ['price']
    ...

ordering указывает сортировку по умолчанию для модели

{% for product in product_list %}
<div class="product-card">
    {{ product.name }}
    <!--
        Вот тут хотелось бы иметь доступ к варианту товара,
        при этом не генерировать множество запросов.
    -->
    {{ product.variant.0.price }}
    {{ product.variant.0.color }}
</div>
{% endfor %}

Если будут лишние запросы, используйте `select_related`
→ Ссылка