如果您创建两个 User 实例并保存它们,那么您将在集合中拥有两个文档。如果您希望他们都有共同的信息,那么有几种方法可以实现这一点:
1.默认属性
class User(db.Document):
email = db.StringField(required=True)
first_name = db.StringField(max_length=50)
last_name = db.StringField(max_length=50)
usertype = db.StringField(default="web user")
u1 = User(email="u1@example.com", first_name="user", last_name="one").save()
u2 = User(email="u2@example.com", first_name="user", last_name="two").save()
assert u1.usertype == "web user"
assert u2.usertype == "web user"
2. 嵌入文档
class UserType(db.EmbeddedDocument):
role = db.StringField(choices=['Admin','Basic','Guest'])
class User(db.Document):
email = db.StringField(required=True)
first_name = db.StringField(max_length=50)
last_name = db.StringField(max_length=50)
usertype = db.EmbeddedDocumentField(UserType)
basic = UserType(role="Basic")
u1 = User(email="u1@example.com", first_name="user", last_name="one", usertype=basic).save()
u2 = User(email="u2@example.com", first_name="user", last_name="two", usertype=basic).save()
assert u1.usertype.role == "Basic"
assert u2.usertype.role == "Basic"
3. 参考文件
class UserType(db.Document):
role = db.StringField(choices=['Admin','Basic','Guest'])
class User(db.Document):
email = db.StringField(required=True)
first_name = db.StringField(max_length=50)
last_name = db.StringField(max_length=50)
usertype = db.ReferenceField(UserType)
basic = UserType(role="Basic").save()
u1 = User(email="u1@example.com", first_name="user", last_name="one", usertype=basic).save()
u2 = User(email="u2@example.com", first_name="user", last_name="two", usertype=basic).save()
assert u1.usertype.role == "Basic"
assert u2.usertype.role == "Basic"
何时使用 anEmbeddedDocument
与 aReferenceField
取决于您的数据模型设计。