1

「BADREQUEST:」が有効なJSON文字列ではありません。tastypieAPIにデータを投稿しようとしたとき。APIは、JSONFieldを持つモデルに基づくModelResourceで構成されています。JSONfieldは、標準のTextFielddjangoフィールドから継承しています。

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']

これに触発されて、デフォルトのModelResourceをオーバーライドしようとしましたが、機能させることができませんでした。

要約すると、tastypieにJSONFieldを受け入れさせるにはどうすればよいですか?

4

1 に答える 1

3

それで、私はついに問題を理解しました。

django がリクエストを受信すると、最初の空の MyModel オブジェクトが作成されます。また、私のモデルの JSONField にはデフォルト値がないため、空の文字列 "" であるスーパー クラスのデフォルト値を使用します。JSONField が空の文字列 "" で開始されると、"'' は有効な JSON 文字列ではありません" という例外が発生します。これにより、さらに 400 BAD REQUEST 応答がトリガーされます。

これは JSONField パッケージのバグだと思います。デフォルト値としてNoneを持つべきです。

ただし、この問題の簡単な修正は、次のようにモデルを変更することです。

class MyModel(models.Model):
   data = jsonfield.JSONField(default=None)
   ...
于 2012-05-16T20:56:07.700 に答える