我在一个群组中有很多用户。我还与每个用户建立了一个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
的教师。
答案 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)
更新以澄清评论中提出的观点
这种事情很有效,因为外键看起来也很有效。引用手册:
它也是倒退的。仅仅是指“反向”关系 使用模型的小写名称。
您使用的原始查询以这种方式引用了组表。