问题:在将值附加到 EmbeddedDocumentListField 时尝试执行 .save() 时出现 ValidationError,因为我缺少文档中已存在的必填字段。
请注意,此时用户文档已作为注册过程的一部分创建,因此它已经在数据库中拥有电子邮件和密码。
我的课程:
class User(gj.Document):
email = db.EmailField(required=True, unique=True)
password = db.StringField(required=True)
long_list_of_thing_1s = db.EmbeddedDocumentListField("Thing1")
long_list_of_thing_2s = db.EmbeddedDocumentListField("Thing2")
class Thing1(gj.EmbeddedDocument):
some_string = db.StringField()
class Thing2(gj.EmbeddedDocument):
some_string = db.StringField()
尝试将新的 EmbeddedDocument 附加到 Thing2 资源端点中我的用户类中的 EmbeddedDocumentListField:
class Thing2(Resource):
def post(self):
try:
body = request.get_json()
user_id = body["user_id"]
user = UserModel.objects.only("long_list_of_thing_2s").get(id=user_id)
some_string = body["some_string"]
new_thing_2 = Thing2Model()
new_thing_2.some_string = some_string
user.long_list_of_thing_2s.append(new_thing_2)
user.save()
return 201
except Exception as exception:
raise InternalServerError
在达到此端点时,我在user.save()
mongoengine.errors.ValidationError: ValidationError (User:603e39e7097f3e9a6829f422) (Field is required: ['email', 'password'])
我认为这是因为.only("long_list_of_thing_2s")
但我特别使用UserModel.objects.only("long_list_of_thing_2s"),因为当我只想附加一些东西时,我不想将整个 UserModel 放入内存中效率低下long_list_of_thing_2s
我应该以不同的方式解决这个问题吗?我对 Flask 和 Mongoengine 比较陌生,所以我不确定在进行此过程时所有最佳实践是什么。