Flask == 1.1.1 pymongo == 3.10.1 flask -restplus == 0.13.0
Я пытаюсь выдвинуть JSON на URL и использовать update()
, но я сталкиваюсь с проблемой. В Routs.py у меня есть простая настройка API ...
@api.route('/api/content/<idx>')
class UpdateContent(Resource):
def put(self,idx):
data = api.payload
Content.objects(content_id=idx).update(**data)
return jsonify(Content.objects(content_id=idx))
Используя Почтальон, я помещаю в / api / content / 2
{
"content_id": 2,
"title": "Test 2",
"description": "Test 2"
}
И я получаю это ...
Traceback (most recent call last):
File "/Users/jyoseph/Sites/testsite/venv/lib/python3.8/site-packages/flask/app.py", line 2463, in __call__
return self.wsgi_app(environ, start_response)
File "/Users/jyoseph/Sites/testsite/venv/lib/python3.8/site-packages/flask/app.py", line 2449, in wsgi_app
response = self.handle_exception(e)
File "/Users/jyoseph/Sites/testsite/venv/lib/python3.8/site-packages/flask_restplus/api.py", line 584, in error_router
return original_handler(e)
File "/Users/jyoseph/Sites/testsite/venv/lib/python3.8/site-packages/flask/app.py", line 1866, in handle_exception
reraise(exc_type, exc_value, tb)
File "/Users/jyoseph/Sites/testsite/venv/lib/python3.8/site-packages/flask/_compat.py", line 38, in reraise
raise value.with_traceback(tb)
File "/Users/jyoseph/Sites/testsite/venv/lib/python3.8/site-packages/flask/app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "/Users/jyoseph/Sites/testsite/venv/lib/python3.8/site-packages/flask/app.py", line 1951, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/jyoseph/Sites/testsite/venv/lib/python3.8/site-packages/flask_restplus/api.py", line 584, in error_router
return original_handler(e)
File "/Users/jyoseph/Sites/testsite/venv/lib/python3.8/site-packages/flask/app.py", line 1820, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/jyoseph/Sites/testsite/venv/lib/python3.8/site-packages/flask/_compat.py", line 38, in reraise
raise value.with_traceback(tb)
File "/Users/jyoseph/Sites/testsite/venv/lib/python3.8/site-packages/flask/app.py", line 1949, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/jyoseph/Sites/testsite/venv/lib/python3.8/site-packages/flask/app.py", line 1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/jyoseph/Sites/testsite/venv/lib/python3.8/site-packages/flask_restplus/api.py", line 325, in wrapper
resp = resource(*args, **kwargs)
File "/Users/jyoseph/Sites/testsite/venv/lib/python3.8/site-packages/flask/views.py", line 89, in view
return self.dispatch_request(*args, **kwargs)
File "/Users/jyoseph/Sites/testsite/venv/lib/python3.8/site-packages/flask_restplus/resource.py", line 44, in dispatch_request
resp = meth(*args, **kwargs)
File "/Users/jyoseph/Sites/testsite/application/routes.py", line 31, in put
Content.objects(content_id=idx).update(**data)
File "/Users/jyoseph/Sites/testsite/venv/lib/python3.8/site-packages/mongoengine/queryset/base.py", line 521, in update
update = transform.update(queryset._document, **update)
File "/Users/jyoseph/Sites/testsite/venv/lib/python3.8/site-packages/mongoengine/queryset/transform.py", line 303, in update
field = cleaned_fields[-1]
IndexError: list index out of range
Я не могу понять, что может быть причиной этой проблемы. Если я изменю код для передачи каждого свойства по отдельности, он будет работать нормально ...
def put(self,idx):
data = api.payload
Content.objects(content_id=idx).update(content_id=data['content_id'], title=data['title'], excerpt=data['excerpt'], description=data['description'])
return jsonify(Content.objects(content_id=idx))
Но это не идеально. Я надеялся использовать ** для распаковки переданного объекта данных.