繁体   English   中英

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

[英]search/filter with list of string 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 在Candidate class 和models.CharField

通过单个字符串/字符搜索,我得到了正确的 output。 但它因刺痛/字符列表而失败。

编辑:添加 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"]
        }
        
    },
    {
        "model": "api.candidate",
        "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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM