python - mongoengine - 使用 QuerySet 作为 ReferenceField

标签 python mongodb mongoengine

基于此tutorial :

from mongoengine import *

connect('tumblelog')

class User(Document):
    email = StringField(required=True, unique=True)
    first_name = StringField(max_length=50)
    last_name = StringField(max_length=50)

class Comment(EmbeddedDocument):
    content = StringField()
    name = StringField(max_length=120)

class Post(Document):
    title = StringField(max_length=120, required=True)
    author = ReferenceField(User, reverse_delete_rule=CASCADE)
    tags = ListField(StringField(max_length=30))
    comments = ListField(EmbeddedDocumentField(Comment))
    meta = {'allow_inheritance': True}

class TextPost(Post):
    content = StringField()

class ImagePost(Post):
    image_path = StringField()

class LinkPost(Post):
    link_url = StringField()


def main():
    john = User(email='<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="bad0ded5dffadfc2dbd7cad6df94d9d5d7" rel="noreferrer noopener nofollow">[email protected]</a>', first_name='John', last_name='Doe')
    john.save()
    john_from_db = User.objects(email='<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="650f010a0025001d04081509004b060a08" rel="noreferrer noopener nofollow">[email protected]</a>')
    post1 = TextPost(title='Fun with MongoEngine', author = john_from_db)
    post1.content = 'Took a look at MongoEngine today, looks pretty cool.'
    post1.tags = ['mongodb','mongoengine']
    post1.save()


if __name__ == '__main__':
    main()

我在 post1.save() 上收到此错误:

mongoengine.base.ValidationError: ValidationError(A ReferenceField only accepts DBRef or documents: ['author'])

我尝试在 ReferenceField 声明中添加 dbref=True/False 选项,但没有解决任何问题。对象 john 是 User 类型,而 john_from_db 是一个 QuerySet。当然,我在这里遗漏了一些东西,如何从数据库获取一个对象并在另一个对象中使用它?

最佳答案

您必须在查询集上调用first()来获取与查询匹配的第一条记录,例如

john_from_db = User.objects(email='<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fe949a919bbe9b869f938e929bd09d9193" rel="noreferrer noopener nofollow">[email protected]</a>').first()

关于python - mongoengine - 使用 QuerySet 作为 ReferenceField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14188049/

相关文章:

c# - 带有连接字符串的mongodb身份验证

mongodb - Laravel 5.2 + MongoDB + Auth = 用户必须实现 CanResetPassword 接口(interface)

python - mongoengine中的EmbeddedDocumentField和ReferenceField

python - Keras,循环输出的成本函数?

c# - 在 MongoDB 中查找和反序列化对象

Python mongoengine - 获取最后一个条目的ID

python - 如何统计mongodb数组中的对象数量?

python - Pyro4 无法在计算机之间连接

python - 在实现二叉搜索树时,Python 中的最大递归深度超出了错误

python - 从 Scikit (Python) 中的管道检索中间特征