Django独特的过滤

时间:2013-11-22 01:32:32

标签: python django

采用以下两种模式:

class Parent(models.Model):
    #...

class Child(models.Model):
    parent = models.ForeignKey(Parent)
    date_made = models.DateField(default=datetime.date.today())
    #... 

目标

能够在Parent个实例中获取所有Child个实例(无双打)。

我有什么

import datetime
today = datetime.date.today()
a_while_ago = now - datetime.timedelta(days=20)

recent = Child.objects.filter(date_made__gte=a_while_ago)

#I would like, in the most efficient way, to be able to get all the unique
#parents of the children in `recent`. I am completely stumped here...

1 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是直接在Parent模型上过滤:

parents = Parent.objects.filter(child__date_made__gte=a_while_ago).distinct()

您还可以在values上使用values_listrecent查询,但会返回parent PK而不是parent个实例:

parent_pks = recent.values_list('parent', flat=True).distinct()

然后,您可以使用in_bulk来检索实际的实例:

parents = Parent.objects.in_bulk(parent_pks)

我希望第一个更快。