如何在Django中进行以下查询?

时间:2016-09-21 08:00:07

标签: django django-queryset

我在一个群组中有很多用户。我还与每个用户建立了一个Profile模型的OneToOne关系。

我正在尝试让所有教师的用户加入特定的学校

我有一个Teacher组,所以我用

过滤了用户
teachers = User.objects.filter(groups__name='Teacher')

以下是个人资料模型。

class Profile(TimeStamped):
    user = models.OneToOneField(User)
    school = models.ForeignKey(School, blank=True, null=True)

假设我试图过滤的学校实例是在名为school的变量上分配的。

我现在如何在teachers变量上添加第二个过滤器,以查找仅限school的教师。

1 个答案:

答案 0 :(得分:2)

Queryset过滤器可以是chained

  

优化QuerySet的结果本身就是一个QuerySet,所以它就是   可以将精炼结合起来。

teachers = User.objects.filter(groups__name='Teacher').filter(profile__school=school)

也可以添加过滤器内的条件

teachers = User.objects.filter(groups__name='Teacher',profile__school=school)

更新以澄清评论中提出的观点

这种事情很有效,因为外键看起来也很有效。引用手册:

  

它也是倒退的。仅仅是指“反向”关系   使用模型的小写名称。

您使用的原始查询以这种方式引用了组表。