假设我的模型如下:
class Farm(models.Model):
name = ...
class Tree(models.Model):
farm = models.ForeignKey(Farm)
...我得到QuerySet
个Tree
个对象。如何确定QuerySet
中代表哪些农场?
答案 0 :(得分:6)
http://docs.djangoproject.com/en/dev/ref/models/querysets/#in
Farm.objects.filter(tree__in=TreeQuerySet)
答案 1 :(得分:4)
使用Django ORM可能有更好的方法来保持懒惰,但你可以通过常规python获得你想要的东西(在我的头顶):
>>> set([ t.farm for t in qs ])
答案 2 :(得分:0)
以下是让数据库为您完成工作的方法:
farms = qs.values_list('farm', flat=True).distinct()
#values_list() is new in Django 1.0
返回值应评估为:
(<Farm instance 1>, <Farm instance5>)
农场将是那个在特定查询集中有树的农场。
对于所有拥有树木的农场,请使用qs = Tree.objects
请记住,如果添加order_by('some_other_column')
,则distinct将应用于'farm'和'some_other_column'的不同组合,因为其他列也将在sql查询中进行排序。我认为它是api中的一个限制(不是预期的功能),它在documentation中有描述。