如何在另一个集合中创建文档时引用集合中的现有文档 MongoEngine

问题描述

我使用的模型如下:


# Creating data models for the interns first project.
class Sex(db.Document):
    _id = ObjectIdField(required=True,default=ObjectId,unique=True,primary_key=True)
    gender = db.StringField()


class Address(db.EmbeddedDocument):
    _id = ObjectIdField(required=True,primary_key=True)
    number = db.IntField()
    street = db.StringField()
    city = db.StringField()
    eircode = db.StringField()


class Person(db.Document):
    _id = ObjectIdField(required=True,primary_key=True)
    name = db.StringField()
    sex = db.ReferenceField(Sex,required=True)
    address = db.ListField(db.EmbeddedDocumentField(Address))

我已经将值创建为“sex”集合中的文档,我想在“person”集合中插入新文档时引用这些值之一。 (据我所知,这将是一对多的关系)

这就是我得到的程度,但没有按预期工作:

    if Person(name='USERNAME',sex=Sex(_id='602a593d3149eb362c296561',gender='Male'),address=[Address(number=1,street='STREET 1',city='CITY 1',eircode='EIRCODE 1'),Address(number=2,street='STREET 2',city='CITY 2',eircode='EIRCODE 2')]
              ).save():
        return 'Successfully added'
    return 'Error in Register'

解决方法

发现我亲自在 oid (_id) 字段上设置默认值时出错,删除它后工作正常。

# Creating data models for the interns first project.
class Sex(db.Document):
    _id = ObjectIdField(required=True,default=ObjectId,unique=True,primary_key=True)
    gender = db.StringField()


class Address(db.EmbeddedDocument):
    _id = ObjectIdField(required=True,primary_key=True)
    number = db.IntField()
    street = db.StringField()
    city = db.StringField()
    eircode = db.StringField()


class Person(db.Document):
    _id = ObjectIdField()
    name = db.StringField()
    sex = db.ReferenceField(Sex,required=True)
    address = db.ListField(db.EmbeddedDocumentField(Address))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...