最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】Django中如何查询一个对象包含于一个列表内均可

Django crifan 1215浏览 0评论
折腾:
【未解决】剧本编写系统中优化全部剧本列表页
期间,需要添加支持:
对于一个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
然后去过滤
继续参考:
Making queries | Django documentation | Django
django search object in list
Django ‘objects.filter()’ with list? – Stack Overflow
好像是我要的:
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)
QuerySet API reference | Django documentation | Django
自己去试试
结果用:
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中如何查询一个对象包含于一个列表内均可

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.184 seconds, using 22.14MB memory