Как сделать запрос postgres RangeField с помощью Hasura GraphQL - PullRequest
0 голосов
/ 29 апреля 2020

Python3
django == 3.0.5
Hasura v1.1.1
postgres == 11.3

Я пытаюсь использовать фильтр Hasura на IntegerRangeField() and DecimalRangeField(), но застрял сначала

from django.contrib.postgres.fields import DecimalRangeField, IntegerRangeField
from django.db import models

class MyModel(modles.Model):
   age = IntegerRangeField()
   ...

В браузере я запрашиваю эту полезную нагрузку

query MyQuery {
  insurance_life_premium(where: {age: {_eq: "47"}}) {
    percentage_rate
    plan_id
    policy_term
    premium
    sum_insured
  }
}

Это вызывает ошибку

{
  "errors": [
    {
      "extensions": {
        "path": "$",
        "code": "data-exception"
      },
      "message": "malformed range literal: \"47\""
    }
  ]
}

Я подтверждаю, что в моей базе данных есть действительные данные

In [1]: Premium.objects.filter(age__contains=47)
Out[1]: <QuerySet [<Premium: Premium object (1)>, <Premium: Premium object (60)>, <Premium: , <Premium: Premium object (878)>, '...(remaining elements truncated)...']>

В терминале упоминается о parentheses

hasura_1    | {"type":"http-log","timestamp":"2020-04-29T17:19:08.094+0000","level":"error","detail":{"operation":{"user_vars":{"x-hasura-role":"admin"},"error":{"path":"$","error":"malformed range literal: \"47\"","code":"data-exception"},"request_id":"aab2de87-1095-423e-9eb1-dae34926b226","response_size":78,"query":{"operationName":"MyQuery","query":"query MyQuery {\n  insurance_life_premium(where: {age: {_eq: \"47\"}}) {\n    percentage_rate\n    plan_id\n    policy_term\n    premium\n    sum_insured\n  }\n}\n"}},"http_info":{"status":200,"http_version":"HTTP/1.1","url":"/v1/graphql","ip":"172.22.0.1","method":"POST","content_encoding":null}}}
postgres_1  | 2020-04-29 17:19:08.095 UTC [34] ERROR:  malformed range literal: "47"
postgres_1  | 2020-04-29 17:19:08.095 UTC [34] DETAIL:  Missing left parenthesis or bracket.
postgres_1  | 2020-04-29 17:19:08.095 UTC [34] STATEMENT:  SELECT  coalesce(json_agg("root" ), '[]' ) AS "root" FROM  (SELECT  row_to_json((SELECT  "_1_e"  FROM  (SELECT  "_0_root.base"."percentage_rate" AS "percentage_rate", "_0_root.base"."plan_id" AS "plan_id", "_0_root.base"."policy_term" AS "policy_term", "_0_root.base"."premium" AS "premium", "_0_root.base"."sum_insured" AS "sum_insured"       ) AS "_1_e"      ) ) AS "root" FROM  (SELECT  *  FROM "public"."insurance_life_premium"  WHERE (("public"."insurance_life_premium"."age") = ($2))     ) AS "_0_root.base"      ) AS "_2_root"
query MyQuery {
  insurance_life_premium(where: {age: {_eq: "[46]"}}) {
    percentage_rate
    plan_id
    policy_term
    premium
    sum_insured
  }
}

Та же ошибка

 "message": "malformed range literal: \"[46]\""

Я пробовал {age: {_in: "(47,]"}} и комбинацию скобок и квадратная скобка. Верни мне пустой список

1 Ответ

0 голосов
/ 29 апреля 2020

На данный момент. Пока не поддерживает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...