空整数字段在Django模型GraphQL

问题描述:

返回错误在我的Django模型之一,我有这样的领域:空整数字段在Django模型GraphQL

version = models.PositiveSmallIntegerField(blank=True, null=True)

为了测试它,我手动创建通过DBBrowser的新纪录对于SQLite并将该字段留空。

当我然后发出的物体上的GraphQL查询,收到此回错误消息:

"errors": [ { "message": "could not convert string to float: " } ] 

更新空字段设置为0或1或2,等,错误消息消失。

我不认为空字段是一个错误,特别是因为我在字段定义中明确指出它可能是空的。缺少默认值0(零),我该如何解决这个问题以摆脱错误信息?

罗伯特

SQLite的已存储一个空字符串,而不是NULL,在你version列,它graphene.Int无法处理。通常,django在通过它存储时不会让这种情况发生。如果您想担心外部创建的值,则可以向模型添加解析器,以确保返回None而不是空字符串。

class MyModel(DjangoObjectType): 

    @graphene.resolve_only_args 
    def resolve_version(self): 
     return self.version or None 
+0

我相信你,当然。对我来说奇怪的是一个字符串如何可能被存储到一个整数字段中。这怎么可能? 事实证明,我不得不删除我的测试数据库,并让Django从头开始重新创建它。瞧,错误不再出现。现在,当我创建一个新记录并且不指定'version'值时,版本字段中会出现'null'。 –

+0

@Robert_LY Sqlite允许这种情况发生,所以你可以通过一个sqlite编辑器或类似的东西,但不通过Django。你可以阅读更多[这里](https://dba.stackexchange.com/questions/106364/text-string-stored-in-sqlite-integer-column)。 – vikki

+0

我没有意识到这一点。那肯定可能是我正在做的手动编辑的结果。谢谢! –