【发布时间】:2021-04-03 08:43:53
【问题描述】:
总结:(Python+Flask+MongoDB)定义了两个模型 - User 和 Post。 Post 引用 User。尝试通过引用已保存的 User 创建 Post 但出现 You can only reference documents once they have been saved to the database 错误。
详情
你好!我正在关注 python(已安装 v3.7)、flask(已安装 v1.1.2)、MongoDB(已安装 mongoengine v0.23.0)编写一个简单的博客应用程序的教程。
我有一个User 模型和一个Post 模型。 User 可以注册、登录和写帖子。我能够创建和保存用户。但是,当我尝试通过引用(以前创建和保存的)User 创建Post 时,我得到 Mongoengine ValidationError You can only reference documents once they have been saved to the database
Post 对象中引用的 User 对象存在于数据库中 - 通过 Mongo shell 确认。
任何指针/帮助/输入将不胜感激。我是 MongoDB 新手。
代码
# models.py
from flask_mongoengine import MongoEngine
db = MongoEngine()
class User(db.Document):
_id = db.ObjectIdField()
username = db.StringField(required = True)
email = db.EmailField(required = True)
class Post(db.Document):
_id = db.ObjectIdField()
created_by = db.ReferenceField(User)
title = db.StringField(required = True)
body = db.StringField(required = True)
# blog.py
""" Module that creates blog posts
from app.models import User, Post
def create():
if request.method == 'POST':
title = request.form['title']
body = request.form['body']
user = User.objects.get(_id=g.user['_id'])
# check user fetched by printing object id
# user[_id] matches the User ObjectID obtained via the mongo shell
print('user id = ' + str(user['_id']))
post = Post(title=title, body=body)
post.created_by = user
post.save() # --> this line generates the error
return redirect(url_for('blog.index'))
return render_template('blog/create.html')
错误
验证中的文件“/Users/
【问题讨论】:
标签: python mongodb mongoengine