2012-05-14 3 views
1

Я получаю «НЕОБХОДИМЫЙ ЗАПРОС:», это не действительная строка JSON. » когда я пытаюсь отправить данные в свой API tastypie. API состоит из ModelResource, который основан на модели, имеющей JSONField. Поле JSON наследуется от стандартного поля django TextField.Как заставить 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 –