Graphene的解析器以字符串的形式返回我的django模型Decimal字段(例如"8.33"而不是8.33(。我想以浮点形式接收它。有办法做到这一点吗?
我的代码如下:
型号.py
class Toy(models.Model):
name = models.CharField(max_length=50)
price = models.DecimalField()
查询.py
class ToyType(DjangoObjectType):
class Meta:
model = Toy
fields = ('name', 'price')
class ToyQuery(graphene.ObjectType):
first_toy = graphene.Field(ToyType)
def resolve_first_toy(self, info):
return Toy.objects.first()
我的查询和结果是:
查询
{
firstToy{
name
price
}
}
结果
{
"data": {
"name": "BuzzLighYear",
"price": "19.95"
}
}
相反,我希望收到:
{
"data": {
"name": "BuzzLighYear",
"price": 19.95
}
}
我必须为价格字段编写一个自定义解析器吗?或者有更优雅的方法可以通过设置来实现这一点吗?
要将十进制值转换为浮点值,请使用自定义解析器,如图所示。
class ToyType(DjangoObjectType):
class Meta:
model = Toy
fields = ('name', 'price')
price = graphene.Float()
def resolve_price(self, info):
return float(self.price)
样本查询和响应
事实证明,您不必编写客户解析程序,而是可以声明Django字段的类型,如下所示:
class ToyType(DjangoObjectType):
price = graphene.Float()
class Meta:
model = Toy
fields = ('name', 'price')
通过这种方式,解析器将以浮点形式返回价格。如果您没有明确声明类型,石墨烯默认值是将django Decimal字段作为字符串返回。