python - mongoengine:使用日期字段更新文档失败 << self.error('cannot parse date "%s"' % value) >>
问题描述
Mongoengine 真的开始成为一个痛苦的**。
我正在通过 Python/Mongoengine 从包含创建日期的 MongoDB 集合中查询文档。
我用 to_json() 将整个输出转换为 json 字符串
document = Qkey.objects(id=id)
djson = document.to_json()
然后包含以下内容:
...
"date_created": {
"$date": 1595784271766
},
...
然后,我将整个 JSON 结构放入 Web 应用程序的 textarea 字段中,让用户更改 JSON 数据(通常他不会更改“date_created”值,而是更改其他一些字段)。
我阅读了整个文本区域并将其从大字符串转换回 Python 字典。
正如预期的那样,字典项在打印时如下所示:
date_created: {'$date': 1595784271766}
但是,当我尝试 update() 整个 Mongoengine 文档时,我得到了这个错误堆栈:
File "/webupdate/app/edit.py", line 38, in update_document
document.update(**attributes_json)
File "/webupdate/env/lib/python3.6/site-packages/mongoengine/queryset/base.py", line 530, in update
update = transform.update(queryset._document, **update)
File "/webupdate/env/lib/python3.6/site-packages/mongoengine/queryset/transform.py", line 317, in update
value = field.prepare_query_value(op, value)
File "/webupdate/env/lib/python3.6/site-packages/mongoengine/fields.py", line 593, in prepare_query_value
return super().prepare_query_value(op, self.to_mongo(value))
File "/webupdate/env/lib/python3.6/site-packages/mongoengine/base/fields.py", line 196, in prepare_query_value
self.validate(value)
File "/webupdate/env/lib/python3.6/site-packages/mongoengine/fields.py", line 536, in validate
self.error('cannot parse date "%s"' % value)
File "/webupdate/env/lib/python3.6/site-packages/mongoengine/base/fields.py", line 171, in error
raise ValidationError(message, errors=errors, field_name=field_name)
mongoengine.errors.ValidationError: cannot parse date "None"
当我完全删除 date_created 时,更新工作。
我希望任何人都可以指出正确的方向,如何通过 JSON 到 Python 字典处理日期字段以更新整个 MongoDB 文档。
解决方案
我不熟悉 mongoengine,但您似乎已经使用to_json
调用将文档序列化为扩展 json。要扭转这种情况,您需要使用例如此处描述的方法将扩展的 json 解析为适当的 python 对象结构。通常,您不能使用普通的 json 解析器解析扩展的 json,并使用生成的类型注释原始文档作为需要“正常”语言类型对象的方法的输入。
推荐阅读
- c++ - CGAL 没有计算完整的德劳内三角剖分
- linux - 重新连接(拨号 tcp [(IPv6 addr)]:443: connect: network is unreachable)
- adobe - 使用 Adobe Acrobat Pro 2017 自动扫描:有快捷键吗?
- angular - mat-nav-list 始终以项目为重点
- javascript - .trigger('change') 满足验证后不断刷新分页数据表
- node.js - 如何使用 webpack 为多个目标构建?
- java - 为什么 Build.VERSION.SDK_INT 显示不正确的数字?
- ios - 而委托要么是 nil 要么没有实现 peripheral:didUpdateValueForCharacteristic:error:?
- python - Python 中 lpsolve 的替代方案,用于快速设置和求解
- python - 如何使用 localId 在 firebase 中保存数据