【问题标题】:ReferenceField in EmbeddedDocument to master DocumentEmbeddedDocument 中的 ReferenceField 到主文档
【发布时间】:2013-01-03 20:44:57
【问题描述】:

我在mongoengine 中有DocumentEmbeddedDocument,就像这样。 如何在EmbeddedDocument 中为Master Document 创建ReferenceField ... master Document 意味着嵌入我的EmbeddedDocument

class Activity(EmbeddedDocument):
    user = ReferenceField(Profile)
    followed_user = ReferenceField(Profile)
    created_date = DateTimeField(default=datetime.datetime.now, required=True)


class Profile(Document):
    username = StringField(max_length=255, required=True)
    password = StringField(max_length=255, required=True)
    email = StringField(max_length=255, required=True)
    activities = ListField(EmbeddedDocumentField(Activity))

Python 说:

 NameError: name 'Profile' is not defined

【问题讨论】:

  • 在 Profiles 中添加 EmbeddedDocumentField 时不需要在 Activity 中添加 Reference 字段
  • @Crazyshezy 为什么?为另一个用户创建参考字段...例如,我关注 X 和 Y,X 关注 N,这对我说 X 关注 N
  • 好的。。mongoengine 也有一个emailField()

标签: python mongoengine


【解决方案1】:

在 EmbeddedDocuments 中也必须使用 self

class Activity(EmbeddedDocument):
    user = ReferenceField('Profile')
    user_unrelated = ReferenceField('Profile')
    created_date = DateTimeField(default=datetime.datetime.now, required=True)

【讨论】:

    【解决方案2】:

    EmbeddedDocuments 应通过 EmbeddedDocumentField 字段类型用作 Documents 上的字段。

    因此你的 Profile 类应该是这样的

    class Profile(Document):
        username = StringField(max_length=255, required=True)
        password = StringField(max_length=255, required=True)
        email = StringField(max_length=255, required=True)
        activities = ListField(EmbeddedDocumentField(Activity))
    

    注意:我正在创建一个列表,因为每个配置文件会有多个活动

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-03
      • 2016-02-29
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      相关资源
      最近更新 更多