graphql-python / graphql-python/graphql-core-legacy
Error serializing field duration = models.DurationField()?
- Vorherrschende Sprache
- Python
- Sterne
- 372
- Forks
- 175
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
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'"
}
```
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Rechercherichtung
Führen Sie zunächst das bereitgestellte Asset model, AssetNode schema und die duration query gegen die angegebene Umgebung aus, um den Fehler zu reproduzieren. Untersuchen Sie graphql/type/scalars.py um Zeile 51 und GraphQLScalarType um Zeile 65. Überprüfen Sie anschließend, dass das Abfragen eines nicht nullbaren Django DurationField ohne den gemeldeten datetime.timedelta-Serialisierungsfehler abgeschlossen wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- graphql, postgresql, python
- Bereich
- api, backend
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 45/100