如何在 Strawberry GraphQL API 中公开 Django 持续时间模型字段? ISO8601 持续时间格式是否有标准实现,或者是否需要实现自定义标量字段?
from django.db import models
class MyModel(models.Model):
name = models.CharField(max_length=255)
my_duration = models.DurationField()
经过一番搜索并没有找到任何东西,这里是一个实现(供我将来参考和繁荣)。使用 pypi 中的
isodate
包。
import isodate
from typing import NewType
from datetime import timedelta
import strawberry
import strawberry_django
from my_app.models import MyModel
Duration = strawberry.scalar(
NewType("Duration", timedelta),
serialize=lambda v: isodate.duration_isoformat(v),
parse_value=lambda v: isodate.parse_duration(v),
)
@strawberry_django.type(MyModel)
class MyModelGQLNode:
name: strawberry.auto
my_duration: Duration