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

如何使用石墨烯 django 对多个字段中的图标使用 OR 条件

如何解决如何使用石墨烯 django 对多个字段中的图标使用 OR 条件

我在 Django 中有以下模型:

class JobPost(models.Model):
    company = models.CharField(blank=True,max_length=30,null=True)
    job = models.CharField(blank=True,null=True)
    category = models.CharField(blank=True,null=True)
    description = models.TextField(blank=True,max_length=500,null=True)
    created_at = models.DateTimeField(auto_Now_add=True)

    def __str__(self):
        return self.job

我有以下石墨烯架构:


class JobPostNode(DjangoObjectType):
    class Meta:
        # Assume you have an Animal model defined with the following fields
        model = JobPost
        filter_fields = {
            'company': ['exact','icontains','istartswith'],'job': ['exact','category': ['exact',"description": ['exact',}
        interfaces = (relay.Node,)


class Query(graphene.ObjectType):

    job = relay.Node.Field(JobPostNode)
    all_jobs = DjangoFilterConnectionField(JobPostNode)


schema = graphene.Schema(query=Query)

我想使用 icontains 而我将基于 OR 而非 AND 获取数据;例如以下查询


{
  allJobs(job_Icontains: "t",company_Icontains: "v") {
    edges {
      node {
        company
        job
      }
    }
  }
}

应该返回工作中有字母“t”或公司中有字母“v”的数据,而不是工作中的字母“t”和公司中的字母“v”。我该怎么做?

解决方法

我发现了如何做到这一点here!对于我的模式,我写了这个:

import graphene
from api_rest.models import JobPost
from django.db.models import Q
from graphene_django import DjangoObjectType


class JobType(DjangoObjectType):
    class Meta:
        model = JobPost


class Query(graphene.ObjectType):
    jobs = graphene.List(
        JobType,search=graphene.String(),first=graphene.Int(),skip=graphene.Int()
    )

    def resolve_jobs(self,info,search=None,first=None,skip=None,**kwargs):
        queryset = JobPost.objects.all()
        if search:
            filter = (
                Q(company__icontains=search)
                | Q(description__icontains=search)
                | Q(category__icontains=search)
            )
            queryset = queryset.filter(filter)

        if skip:
            queryset = queryset[skip:]

        if first:
            queryset = queryset[:first]
        return queryset


schema = graphene.Schema(query=Query)

现在,使用以下查询,我得到了我想要的结果:

{
  jobs(search: "transpo") {
    id
    company
    category
    job
    createdAt
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。