Django 子查询多个值

Django Subquery many values

class Category(models.Model):
    name = models.CharField(max_length=100)
    date = models.DateTimeField(auto_now=True)


class Hero(models.Model):
    name = models.CharField(max_length=100)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)

我要分类模型名称、数据、id

cookbook中,我写了上面的代码

hero_qs = Hero.objects.filter(
    category=OuterRef("pk")
).order_by("-benevolence_factor")

Category.objects.all().annotate(
    most_benevolent_hero=Subquery(
    hero_qs.values('name')[:1]
    )
)

hero_qs.values('name')

好像只能输入一个值

是否可以通过一个annotate获取name、data、id?

如果你真的想使用单个注释,你可以尝试连接字段

from django.db.models import Subquery, OuterRef, CharField, Value as V
from django.db.models.functions import Concat

hero_qs = Hero.objects.filter(
    category=OuterRef("pk")
).order_by("-benevolence_factor").annotate(
    details=Concat('name', V(','), 'id', output_field=CharField())
)

Category.objects.all().annotate(
    most_benevolent_hero=Subquery(
    hero_qs.values('details')[:1]
    )
)

然后你可以使用字符串插值来分离出数据,这是一个相对便宜的操作

name, id = category.most_benevolent_hero.split(',')