【问题标题】:Get distinct objects for foreign key in existing Django query在现有 Django 查询中获取外键的不同对象
【发布时间】:2015-01-16 08:33:41
【问题描述】:

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

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

class User(models.Model):
    pass

我有一个相当复杂的查询,它返回一个小部件查询集。从中我想列出用户的不同值。

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

迄今为止,我最好的想法是取出.values_list('owner', flat=True),然后使用它进行User.objects.filter(pk__in=...)。这将其拉回到两个查询,但这似乎仍然超出了应有的范围。

有什么想法吗?

【问题讨论】:

  • 您是否尝试将小部件查询添加到像 User.objects.get(widgets__in=...) 这样的查询中?

标签: django django-queryset


【解决方案1】:

使用后向关系:

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

【讨论】:

  • 确实有效。最后需要.distinct() 来停止重复,但是是的,这很好用。我一直认为__in 修饰符只适用于数组,但很高兴看到它相当智能。
  • 这个查询集在filter()之前已经有distinct()调用
  • 确实如此。你有我的歉意。
猜你喜欢
  • 1970-01-01
  • 2011-01-22
  • 2011-09-01
  • 2011-02-19
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-14
相关资源
最近更新 更多