折腾:
【未解决】剧本编写系统中优化全部剧本列表页
期间,需要添加支持:
对于一个Script,有个author的外键,是个User对象
而想要查询author,是否在一个
FunctionGroup的members的list中
其中每个member都是User
即:script的author在一个member list中任意一个均可
现有代码如下:
filterAuthor = request.user # if pass in author_id, take precedence for filter author over request user authorId = request.query_params.get('author_id', '') logger.info("authorId=%s", authorId) if authorId: passInAuthor = User.objects.get(pk=authorId) logger.info("passInAuthor=%s", passInAuthor) if passInAuthor: filterAuthor = passInAuthor logger.info("filterAuthor=%s", filterAuthor) filter_condition = self.generateQueryFilterCondiction(request) logger.info("filter_condition=%s", filter_condition) currentUserScriptList = Script.objects.filter(author=filterAuthor)
需要改造为:
把filterAuthor改为filterAuthorList
然后去过滤
继续参考:
django search object in list
好像是我要的:
creator__in=creator_list
或用Q:
from django.db.models import Q my_filter_qs = Q() for creator in creator_list: my_filter_qs = my_filter_qs | Q(creator=creator) my_model.objects.filter(my_filter_qs)
自己去试试
结果用:
filterByUserScriptList = Script.objects.filter(author__in=filterAuthorList)
不过期间出错:
【已解决】Django出错:TypeError: object of type ‘ManyRelatedManager’ has no len()
【总结】
此处,Django中想要去queryset去判断一个对象,是否在一个对象列表中,具体的query查询语法是:
xxx__in=objList
比如:
filterByUserScriptList = Script.objects.filter(author__in=filterAuthorList)
即可去查找到Script中,User对象类型的author作者,是在一个User的List中。
会返回符合这个条件的所有的Script。
转载请注明:在路上 » 【已解决】Django中如何查询一个对象包含于一个列表内均可