Django Подзапрос на множество значений
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')
можно ввести только одно значение.Можно ли получить имя, данные, 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(',')