Я получил родитель-дети (1-п) реляционная модель:Как получить единый связанный объект после фильтра
class Parent(models.Model):
some_fields = models.IntegerField()
class Child(models.Model):
parent = models.ForeignKey(Parent, relatend_name='children')
first = models.BooleanField()
second = models.BooleanField()
Теперь я фильтровать родителей на основе детских полей:
Parent.objects.filter(children__first=True)
Это порождает следующий SQL:
SELECT app_parent.*
FROM app_parent
INNER JOIN app_child ON app_parent.id = app_child.parent_id
WHERE app_child.first = TRUE
после того, что я получил все поля Родительские НО Я хочу, чтобы связанные дочерние поля также получили такой SQL:
SELECT app_parent.*, app_child.*
FROM app_parent
INNER JOIN app_child ON app_parent.id = app_child.parent_id
WHERE app_child.first = TRUE
и получить его через Django ORM. Есть идеи?
UPDATE
Я думаю, что у меня есть хороший обходной
parents = Parent.objects.filter(children__first=True).prefetch_related('children') \
.extra(select={'child_id': '"app_child"."id"'})
for parent in parents:
parent.child = [child for child in parent.children.all() if child == parent.child_id][0]
Посмотрите на 'for' петли. Существует дочерний атрибут, назначенный aith first child, отфильтрованный из списка предварительно выбранных детей. – ArturM