2012-05-14 38 views
1

我得到一個「壞請求:」不是有效的JSON字符串。「當我嘗試將數據發佈到我的tastypie API時。該API由基於具有JSONField的模型的ModelResource組成。 JSONfield繼承自標準TextField django字段。如何讓tastypie接受JSONField?

如果將JSONField更改爲TextField,則會收到數據並且一切正常。

我的代碼是與此類似:

model.py

class MyModel(models.Model): 
    data = jsonfield.JSONField() # If i change this to a TextField everything works 
    ... 

api.py

class MyModel(ModelResource): 
    #Resource for MyModel() 
    ... 
    class Meta: 
     queryset = MyModel.objects.all() 
     authentication = Authentication() 
     authorization = Authorization() 
     list_allowed_methods = ['get', 'post'] 

通過this啓發,我已經試過覆蓋默認ModelResource,但我一直未能得到它的工作。

所以總結一下,我該如何讓tastypie接受JSONField?

回答

3

所以我終於弄清楚了這個問題。

當Django收到請求時,它會導致創建一個初始的空MyModel對象。由於我的模型JSONField沒有默認值,它使用超類的默認值,它是一個空字符串「」。當JSONField被初始化爲空字符串「」時,它會引發一個異常,說'''不是有效的JSON字符串。「這進一步觸發了400 BAD REQUEST響應。

我認爲這是JSONField包中的一個錯誤,它應該有作爲默認值。

一個簡單的辦法解決這個問題不過是剛剛更改模型,如下所示:

class MyModel(models.Model): 
    data = jsonfield.JSONField(default=None) 
    ... 
+0

根據這個傢伙'null'或'blank'工作爲好。他還建議覆蓋JSONField的索引方法:https://groups.google.com/forum/?fromgroups=#!topic/django-users/iS5aE3R5JP4 –

相關問題