Это была ошибка проверки. База данных принимала JSON в определенном формате, чем я публиковал. И способ обработки почтового запроса также был неверным. Это ожидаемый формат:
{
...,
"picture" = {"$ref": "fs.files",
"$id": ObjectId("5e6a...f9q102")},
...
}
Почтальон не может принять вышеуказанный формат, вместо этого он принял это:
{
"_id" : "1",
"name" : "John Doe",
"picture": {"$ref": "fs.files", "$id": {"$oid": "5e6a...f9q102"}},
"password" : "<hashed pw>",
"email" : "example@example.com"
}
Чтобы сделать эту работу, я изменил модель, чтобы она выглядела так в моем flask Приложении:
class Users(db.Document):
_id = db.StringField()
name = db.StringField()
picture = db.ReferenceField('fs.files') #I changed this to a reference field because it holds the reference for the file and not the actual file in the database
upload_picture = db.FileField() #I added this field so I can still upload pics via flask and via this document
email = db.StringField()
password = db.StringField()
meta = {'collection': 'Users'}
Тогда я должен был добавить этот импорт и изменить код так, что он будет читать ввод как JSON и передать опорное значение изображений на ObjectId(id)
так что он соответствует формату, который ожидала база данных.
from bson.json_util import loads
def post(self):
body = str(request.get_json())
x = body.replace("'", '"') #replace single quotes as double quotes to match JSON format
data = loads(x)
officer = Officers(**data).save()
return 'Successful Upload', 200
Тогда вуаля, все работает!