mongoengine - 将新字段添加到子文档后无法保存文档。使用 EmbeddedDocumentListField 引用
问题描述
我有一个文档及其子文档,它可以在不更改任何现有内容的情况下正常工作。当我向子文档添加新字段时,在保存时我得到“您只能在将文档保存到数据库后才能引用它们”
class SkillDetail(EmbeddedDocument):
SkillName = StringField()
EnrollDate = DateField()
#newfield = ListField()
class Skills(Document):
id = IntField()
Name = StringField()
SkillsDetails = EmbeddedDocumentField(SkillDetail)
def update_method(self, skillNamevalue, enrolldate, newFieldValues):
self.SkillsDetails.append(
SkillDetail(SkillName=skillNamevalue, EnrollDate=enrolldate, newfield=newFieldValues))
self.save()
如果没有嵌入文档中的新字段,它实际上可以正常工作。但是,当我添加新字段(SkillDetail 文档中突出显示的字段)并运行程序时,我得到了上面提到的错误。
注意:实际上我在 Skills 类中调用 update_method() 方法来为嵌入的文档赋值
请帮我解决这个问题提前谢谢
解决方案
我必须在您的代码中修复一些东西(例如,制作 id 主键,制作SkillsDetails
a EmbeddedDocumentListField
)但以下内容对我有用:
from mongoengine import *
import datetime as dt
conn = connect()
class SkillDetail(EmbeddedDocument):
skill_name = StringField()
enroll_date = DateField()
newfield = ListField()
class Skills(Document):
id = IntField(primary_key=True)
name = StringField()
skills_details = EmbeddedDocumentListField(SkillDetail)
def update_method(self, skill_name, enroll_date, new_field_values):
self.skills_details.append(SkillDetail(skill_name = skill_name, enroll_date=enroll_date, newfield = new_field_values))
self.save()
sk = Skills(id=1, name='myname')
sk.update_method('a', dt.datetime.utcnow(), [1,2])
existing_sk = Skills.objects.first()
existing_sk.newfield
print(existing_sk.skills_details[0].newfield) # prints "[1, 2]"
推荐阅读
- php - 如何配置ini文件用php发送邮件
- python-3.x - 将索引转换为日期时间会导致奇怪的错误
- php - 从数据库中提取数据并放入 html 表
- github - 创建 Github Token 以授予用户对 git clone 的访问权限
- php - 修改 WooCommerce REST API 产品图片上传
- python - 在不使用 break 的情况下请求特定输入
- amazon-web-services - AWS Cloudfront 不适用于自定义域
- sql - 将多选查询更改为 CTE 查询
- php - 如何修复'单选按钮值未保存在数据库中
- c# - 无法同时发布元数据和多部分。收到 400 错误请求