微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

搜索/过滤字符串graphene-django列表

如何解决搜索/过滤字符串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 举报,一经查实,本站将立刻删除。