If you create two instances of User and save them then you will have two documents in the collection. If you want them both to have common information then there are few ways to achieve this:
1. default attributes
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. embedded documents
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. referenced documents
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"
When to use an EmbeddedDocument
versus a ReferenceField
depends on your data model design.