无法传递自定义响应

时间:2019-06-20 02:22:44

标签: python django graphene-django

当我查询job_seeker个人资料时,如果没有job_seeker数据,那么我将收到错误JobSeeker models query does not exist。相反,如果没有数据,我想传递空列表。为此,我尝试了以下方法,但出现错误,因此无法通过自定义响应

class JobSeekerNode(DjangoObjectType):
    class Meta:
        model = models.JobSeeker
        interfaces = (relay.Node, )

class JobSeekerQueries(ObjectType):
    job_seeker = Field(JobSeekerNode)

    def resolve_job_seeker(self, info, **kwargs):
        data = {}
        if info.context.user.is_authenticated:
            try:
                profile = Profile.objects.get(user=info.context.user)
                try:
                    job_seeker = models.JobSeeker.objects.get(profile=profile)
                    data['job_seeker'] = job_seeker
                except:
                    # when there's no row instead of passing error, pass empty list
                    data['job_seeker'] = []
                return JsonResponse(data)
            except Profile.DoesNotExist:
                return []
        return None

这是我尝试传递自定义响应时遇到的错误(如果没有数据,则为空列表)

{
  "errors": [
    {
      "message": "Received incompatible instance \"<JsonResponse status_code=200, \"application/json\">\"."
    }
  ],
  "data": {
    "job_seeker": null
  }
}

我什至尝试了这个

def resolve_job_seeker(self, info, **kwargs):
    if info.context.user.is_authenticated:
        try:
            profile = Profile.objects.get(user=info.context.user)
            try:
                job_seeker = models.JobSeeker.objects.get(profile=profile)
                return job_seeker
            except:
                return models.JobSeeker.objects.none()
        except Profile.DoesNotExist:
            return []
    return None

我仍然遇到这样的问题

{
  "errors": [
    {
      "message": "Received incompatible instance \"<QuerySet []>\"."
    }
  ],
  "data": {
    "job_seeker": null
  }
}

1 个答案:

答案 0 :(得分:0)

您真的使用models.JobSeeker.objects之类的东西吗? 如果JobSeeker是模型,则应该为JobSeeker.objects.filter

您无法返回在查询对象中定义的自定义内容。 您正在调用get方法。 objects.get()返回单个对象而不是列表。 一个更简单的解决方案是调用filter()

job_seeker = JobSeeker.objects.filter(profile=profile)
return job_seeker

如果没有任何匹配的配置文件,它将返回一个空列表。 在这两种情况下,只需返回求职者。 如果这是您想要的,则无需使用数据之类的额外字段。

def resolve_job_seeker(self, info, **kwargs):
    if info.context.user.is_authenticated:
        try:
            profile = Profile.objects.get(user=info.context.user)
            job_seeker = JobSeeker.objects.filter(profile=profile)
            return job_seeker
        except Profile.DoesNotExist:
            raise Exception("Profile is not created for this user")
    raise Exception("user not logged in")