如何解决搜索/过滤字符串graphene-django列表
我正在寻找使用 graphene-django 和单个搜索查询运行来搜索不同字符/字符串的列表。
class Query(graphene.ObjectType):
candidateInfo = graphene.List(CandidateType,search=graphene.String(),first=graphene.Int(),skip=graphene.Int(),last=graphene.Int(),)
def resolve_candidateInfo(self,info,search=None,first=None,last=None,skip=None,**kwargs):
qs = Candidate.objects.all()
if search:
filter = (
Q(candidateName__icontains=search)|
Q(candidateEmail__icontains=search)|
Q(candidateSkills__icontains=search)
)
qs = qs.filter(filter)
return qs
这里的CandidateName、CandidateSkills、CandidateEmail 都在带有models.CharField 的Candidate 类中
通过单个字符串/字符搜索,我得到了正确的输出。但它因刺痛/字符列表而失败。
编辑:添加json示例:
[
{
"model": "api.candidate","pk": 1,"fields": {
"candidateName" : "Jack","candidateEmail" : "Jack@gmail.com","candidateSkills" : ["machine learning","Artificial Intelligence"]
}
},{
"model": "api.candidate","pk": 2,"fields":{
"candidateName" : "John","candidateEmail" : "John@gmail.com","candidateSkills" : ["python","machine learning"]
}
},"pk": 3,"fields":{
"candidateName" : "Smith","candidateEmail" : "Smith@gmail.com","candidateSkills" : ["python"]
}
}
]
如果查询进入:
query{
candidateInfo(search: "python")
{
candidateName
candidateEmail
}
}
# output must contain data of John and Smith (from sample json)
如果查询是
query{
candidateInfo(search: ["python","artificial intelligence"])
{
candidateName
candidateEmail
}
}
#output must contain data of Jack,John and smith
添加候选模型
from django.db import models
class Candidate(models.Model):
candidateName = models.CharField(max_length=100)
candidateEmail = models.CharField(max_length=100)
candidateSkills = models.CharField(max_length=100)
def __str__(self):
return self.candidateSkills
解决方法
您可以像这样运行 for
循环:
qs = Candidate.objects.all()
if search:
if type(search) == list:
qs_l = []
for search_item in search:
filter = (
Q(candidateName__icontains=search_item)|
Q(candidateEmail__icontains=search_item)|
Q(candidateSkills__icontains=search_item)
)
qs_l.append(qs.filter(filter))
qs = qs_l
else:
filter = (
Q(candidateName__icontains=search)|
Q(candidateEmail__icontains=search)|
Q(candidateSkills__icontains=search)
)
qs = qs.filter(filter)
return qs
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。