【问题标题】:could not pass custom response无法传递自定义响应
【发布时间】:2019-06-20 02:22:44
【问题描述】:

当我查询 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
  }
}

【问题讨论】:

    标签: python django graphene-django


    【解决方案1】:

    如果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")
    

    【讨论】:

      猜你喜欢
      • 2022-11-10
      • 1970-01-01
      • 2021-11-01
      • 2017-12-23
      • 2018-02-26
      • 2016-08-19
      • 2017-02-26
      • 2015-04-12
      • 2020-09-26
      相关资源
      最近更新 更多