Django,用最低参数的多对多字段元素的ID注释字段

问题描述

我有以下型号:

from django.db import models

class Topping(models.Model):
    # ...
    price = models.IntegerField()

class Pizza(models.Model):
    # ...
    toppings = models.ManyToManyField(Topping)

我需要获得以下查询

my_query = Pizza.objects.all().annotate(
                            topping_with_min_price="get id of topping with the minimal price")

那么,如何获得呢?

解决方法

您可以使用 Subquery

from django.db.models import OuterRef,Subquery

my_query = Pizza.objects.annotate(
    topping_with_min_price=Subquery(
        Topping.objects.filter(
            pizza=OuterRef('pk')
        ).order_by('price').values('pk')[:1]
    )
)