0

Backbone.js + Tastypie + Djangoを使用しており、 patch = true を使用してモデルを保存して、モデルのポイントを更新しようとしています。

this.save({
  points: newPoints
}, {
  patch: true
});

これにより、リクエスト ペイロードを使用して PUT リクエストが発行されます。

points: 105

ただし、500エラーメッセージが表示されます

{"error_message": "'bool' object has no attribute 'read'", "traceback": "Traceback (most recent call last):

  File \"/Users/me/.virtualenvs/project/lib/python2.7/site-packages/tastypie/resources.py\", line 217, in wrapper
    response = callback(request, *args, **kwargs)

  File \"/Users/me/.virtualenvs/project/lib/python2.7/site-packages/tastypie/resources.py\", line 468, in dispatch_detail
    return self.dispatch('detail', request, **kwargs)

  File \"/Users/me/.virtualenvs/project/lib/python2.7/site-packages/tastypie/resources.py\", line 491, in dispatch
    response = method(request, **kwargs)

  File \"/Users/me/.virtualenvs/project/lib/python2.7/site-packages/tastypie/resources.py\", line 1656, in patch_detail
    self.update_in_place(request, bundle, deserialized)

  File \"/Users/me/.virtualenvs/project/lib/python2.7/site-packages/tastypie/resources.py\", line 1679, in update_in_place
    return self.obj_update(bundle=original_bundle, **kwargs)

  File \"/Users/me/.virtualenvs/project/lib/python2.7/site-packages/tastypie/resources.py\", line 2209, in obj_update
    bundle = self.full_hydrate(bundle)

  File \"/Users/me/.virtualenvs/project/lib/python2.7/site-packages/tastypie/resources.py\", line 909, in full_hydrate
    value = field_object.hydrate(bundle)

  File \"/Users/me/.virtualenvs/project/lib/python2.7/site-packages/tastypie/fields.py\", line 382, in hydrate
    value = make_aware(parse(value))

  File \"/Users/me/.virtualenvs/project/lib/python2.7/site-packages/dateutil/parser.py\", line 720, in parse
    return DEFAULTPARSER.parse(timestr, **kwargs)

  File \"/Users/me/.virtualenvs/project/lib/python2.7/site-packages/dateutil/parser.py\", line 308, in parse
    res = self._parse(timestr, **kwargs)

  File \"/Users/me/.virtualenvs/project/lib/python2.7/site-packages/dateutil/parser.py\", line 356, in _parse
    l = _timelex.split(timestr)

  File \"/Users/me/.virtualenvs/project/lib/python2.7/site-packages/dateutil/parser.py\", line 150, in split
    return list(cls(s))

  File \"/Users/me/.virtualenvs/project/lib/python2.7/site-packages/dateutil/parser.py\", line 147, in next
    return self.__next__()  # Python 2.x support

  File \"/Users/me/.virtualenvs/project/lib/python2.7/site-packages/dateutil/parser.py\", line 141, in __next__
    token = self.get_token()

  File \"/Users/me/.virtualenvs/project/lib/python2.7/site-packages/dateutil/parser.py\", line 72, in get_token
    nextchar = self.instream.read(1)

AttributeError: 'bool' object has no attribute 'read'
"}

UserProfile のモデル リソースは次のとおりです。

class UserProfileResource(ModelResource):

    """A resource for the UserProfile model."""

    class Meta:
        queryset = UserProfile.objects.all()
        resource_name = 'userprofile'
        authorization = Authorization()
        excludes = ['field_to_exclude']
        always_return_data = True

このエラーをデバッグする方法に関するヒントはありますか?

4

1 に答える 1

0

null の datetimefield であるフィールドがあり、API 呼び出しで datetime として表示される代わりに、ブール値として表示されます。なぜこうなったのかはわかりませんが、tastypie のバグか、設定を誤解したか、あるいはその両方だと思います。

このフィールドを Tastypie リソースから除外したところ、モデルに対して PUT と PATCH を正常に実行できました。

于 2013-07-17T07:59:42.327 に答える