石墨烯解析器可以为django Decimal字段返回Float而不是String吗



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字段作为字符串返回。

相关内容

最新更新