Django REST Framework关联表过滤求助:筛选Kalas.isActive=True的用户
解决关联模型字段过滤问题
嘿,我明白你现在碰到的问题啦——你想筛选出那些关联的Kalas模型isActive=True的用户,但不小心误用了User自身的is_active字段,对吧?这是新手处理Django关联查询时特别常见的小误区,咱们马上把它搞定!
问题根源
你之前的代码User.objects.all().filter(isActive=True)是直接在User模型里找isActive字段,但这个字段其实是定义在Kalas模型里的,User模型本身只有自带的is_active字段,所以才会出现匹配错误的情况。
正确的过滤方式
因为User和Kalas是一对一关联,Django的ORM支持用**双下划线__**来跨关联模型查询字段。你只需要通过User反向关联的Kalas对象(默认是模型名小写kalas)来访问isActive字段就行:
class ActiveOnMap(generics.ListAPIView): def get_queryset(self): # 跨关联模型过滤:通过User的kalas关联,筛选Kalas.isActive为True的记录 return User.objects.filter(kalas__isActive=True) serializer_class = MapSerializer
额外小提示
all()可以省略,因为filter()本身就会返回一个QuerySet,写不写效果完全一样;- 如果存在没有关联Kalas记录的User,你可以加上
kalas__isnull=False来确保只返回有Kalas关联且活跃的用户:
return User.objects.filter(kalas__isnull=False, kalas__isActive=True)
这样你的接口就只会展示那些关联的Kalas处于活跃状态的用户啦!
内容的提问来源于stack exchange,提问作者oleM
相关产品推荐
相关产品推荐

