我得到了父子(1-n)模型關係:如何過濾後得到的單相關對象
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'循環。從預取的孩子列表中篩選出第一個孩子的孩子屬性。 – ArturM 2014-01-27 10:34:29