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 importOuterRef, Subquery
my_query = Pizza.objects.annotate(
topping_with_min_price=Subquery(
Topping.objects.filter(
pizza=OuterRef('pk')
).order_by('price').values('pk')[:1]
)
)

最新更新