Как ссылаться на существующие документы в коллекции при создании документов в другой коллекции 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, default=ObjectId, unique=True, primary_key=True)
    number = db.IntField()
    street = db.StringField()
    city = db.StringField()
    eircode = db.StringField()


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

У меня уже есть значения, созданные как документы в коллекции «пол», я хочу сослаться на одно из этих значений при вставке нового документа в коллекцию «человек». (Насколько я понял, это будет связь один ко многим)

Вот как далеко я продвинулся, но это не работает так, как ожидалось:

    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'


person Renan Oliveira    schedule 15.02.2021    source источник


Ответы (1)


Выяснил, что я получаю сообщение об ошибке при установке значений по умолчанию в поле 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, default=ObjectId, unique=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))
person Renan Oliveira    schedule 15.02.2021