在现有Django查询中获取外键的不同对象

时间:2015-01-16 08:33:41

标签: django django-queryset

考虑以下多对一关系。用户可以拥有许多小部件:

class Widget(models.Model):
    owner = models.ForeignKey('User')

class User(models.Model):
    pass

我有一个相当复杂的查询,它返回一个Widgets的查询集。从那里我想列出用户的不同值。

我知道我可以循环使用我的小部件并使用.values('owner'){% regroup ... %}拉出用户,但数据集非常庞大,我想在数据库中执行此操作,因此它实际上不会返回用户小部件第一次出现。

我最好的想法是提取.values_list('owner', flat=True),然后使用它User.objects.filter(pk__in=...)。这将它拉回到两个查询中,但仍然看起来比它应该更多。

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

使用落后关系:

User.objects.distinct().filter(widget__in=your_widget_queryset)