2017-08-03 95 views
1

返回錯誤在我的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(零),我該如何解決這個問題以擺脫錯誤信息?

羅伯特

回答

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

我沒有意識到這一點。那肯定可能是我正在做的手動編輯的結果。謝謝! –