【问题标题】:Can graphene resolver return Float instead of String for django Decimal field?石墨烯解析器可以为 django 十进制字段返回浮点数而不是字符串吗?
【发布时间】:2022-10-18 23:24:07
【问题描述】:

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

     } 
}

我是否必须为价格字段编写自定义解析器,还是有更优雅的方法来设置?

【问题讨论】:

    标签: django django-models type-conversion graphene-python graphene-django


    【解决方案1】:

    要将十进制值转换为浮点数,请使用如图所示的自定义解析器。

    class ToyType(DjangoObjectType):
        class Meta:
            model = Toy
            fields = ('name', 'price')
    
        price = graphene.Float()
    
        def resolve_price(self, info):
            return float(self.price)
    

    Sample query and response

    【讨论】:

      猜你喜欢
      • 2021-03-14
      • 2020-03-23
      • 2018-03-08
      • 2019-01-19
      • 2018-04-07
      • 2019-04-03
      • 2022-10-25
      • 2021-09-25
      • 2017-10-26
      相关资源
      最近更新 更多