如何在Django中限制反向关系的结果

时间:2017-03-01 15:27:22

标签: mysql django

我有两个表,一个名为Company,另一个名为User,每个用户都使用ForeignKey与一家公司相关。所以我可以在Django中使用反向关系来获取特定公司的所有用户(例如company.users

在我的情况下,我正在构建ListAPIView,它会返回多家公司,并且我想要返回最新创建的用户。我的问题是我不想使用prefetch_relatedselect_related因此会加载所有用户,因为我们每个公司最终可能会有数千名用户!另外,我不想在单独的查询中加载每个最新用户,因此每个API请求最终会有数十个查询!

我尝试过这样的事情:

users_qs = models.User.objects.filter(active=True).order_by('-created')
company_qs = models.Company.objects.prefetch_related(
                 Prefetch('users', queryset=users_qs[:1], to_attr='user')
             ).order_by('-created')

在这种情况下,prefetch_related失败,因为我们无法对Prefetch queryset过滤器设置限制(它会出现此错误"无法一旦获得切片就过滤查询。")

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我认为您提供的是对象而不是查询集Prefetch('users', queryset=users_qs[:1], to_attr='user')