采用以下两种模式:
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...
答案 0 :(得分:1)
执行此操作的一种方法是直接在Parent
模型上过滤:
parents = Parent.objects.filter(child__date_made__gte=a_while_ago).distinct()
您还可以在values
上使用values_list
或recent
查询,但会返回parent
PK而不是parent
个实例:
parent_pks = recent.values_list('parent', flat=True).distinct()
然后,您可以使用in_bulk
来检索实际的实例:
parents = Parent.objects.in_bulk(parent_pks)
我希望第一个更快。