не может передать пользовательский ответ - PullRequest
0 голосов
/ 20 июня 2019

, когда я запрашиваю профиль 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 голосов
/ 07 июля 2019

Вы действительно используете что-то вроде 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")
...