graphql-python / graphql-python/graphql-core-legacy

Error serializing field duration = models.DurationField()?

Aperta
#150 2 commenti 4 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Python
Stelle
372
Fork
175
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

Hi there, i'm not 100% sure if this is a bug or not (I'm newbee here) but i got a problem while querying a Node that uses the field type models.DurationField ( it really returns datetime.timedelta).

```
Traceback (most recent call last):
File "/tmp/leaky_venv/lib/python3.6/site-packages/promise/promise.py", line 65, in try_catch
return (handler(*args, **kwargs), None)
File "/tmp/leaky_venv/lib/python3.6/site-packages/graphql/execution/executor.py", line 375, in
resolved
File "/tmp/leaky_venv/lib/python3.6/site-packages/graphql/execution/executor.py", line 399, in complete_value
return complete_leaf_value(return_type, result)
File "/tmp/leaky_venv/lib/python3.6/site-packages/graphql/execution/executor.py", line 440, in complete_leaf_value
return return_type.serialize(result)
File "/tmp/leaky_venv/lib/python3.6/site-packages/graphql/type/scalars.py", line 51, in coerce_float
return float(value)
TypeError: float() argument must be a string or a number, not 'datetime.timedelta'
```

This error points to line 51 but i think the class GraphQLScalarType (on line 65) is also related.

Here is my env's prop
```
PostgreSQL 10.0 on x86_64-pc-linux-gnu (xubuntu 16.04), compiled by gcc (Debian 6.3.0-18) 6.3.0 20170516, 64-bit

Python == 3.6.1

Django==1.11.6
django-filter==1.1.0
graphene==2.0
graphene-django==2.0.0
graphql-core==2.0
graphql-relay==0.4.5
```
How to reproduce?

1- Create your model
```
class Asset(models.Model):
duration = models.DurationField(null=True, blank=True, help_text="Duration of a given offer/product (auto calculated)")

class Meta:
ordering = ["id"]
```

2-Create your schema
```
class AssetNode(DjangoObjectType):

class Meta:
model = Asset
interfaces = (relay.Node, )
```
3- insert a not-null value on the duration field... and run your query.

```
{assets(first:20,) {
edges {
node {
id
duration
}
}
}}
```

and you should que the error:
```
{
"message": "float() argument must be a string or a number, not 'datetime.timedelta'"
}
```

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.