Używam MongoDB z Flask-MongoEngine jako mojego komponentu ORM do mojej aplikacji internetowej.Problem dotyczący osadzonych dokumentów z MongoEngine
Mam skonstruowany schemat dokument użytkownika tak:
from ..core import db
class UserComics(db.EmbeddedDocument):
favorites = db.SortedListField(db.StringField(), default=None)
class UserSettings(db.EmbeddedDocument):
display_favs = db.BooleanField(default=False)
default_cal = db.StringField(default=None)
show_publishers = db.ListField(db.StringField(), default=None)
class UserTokens(db.EmbeddedDocument):
refresh_token = db.StringField(default=None)
access_token = db.StringField(default=None)
expire_time = db.StringField(default=None)
class User(db.Document, UserMixin):
# Save User document to this collection
meta = {'collection': 'users_test'}
userid = db.StringField()
full_name = db.StringField()
first_name = db.StringField()
last_name = db.StringField()
gender = db.StringField()
birthday = db.StringField()
email = db.EmailField()
friends = db.ListField(db.StringField())
date_creation = db.DateTimeField()
last_login = db.DateTimeField()
favorites = db.EmbeddedDocumentField(UserComics)
settings = db.EmbeddedDocumentField(UserSettings)
tokens = db.EmbeddedDocumentField(UserTokens)
Jednak Podczas tworzenia nowego użytkownika tak (mam pozostawione na liniach ...):
def create_new_user(resp):
newUser = User()
....
newUser.settings.default_cal = resp['calendar']
....
newUser.save()
return
biegnę do tego błędu:
AttributeError: obiekt 'NoneType' nie ma atrybutu 'default_cal'
Wydaje mi się, że nie używam poprawnie dokumentów wbudowanych w MongoEngines, ale nie wiem, gdzie idę źle.
Każda pomoc będzie bardzo ceniona!
Możesz też utworzyć domyślnie dokument osadzony: 'db.EmbeddedDocumentField (UserSettings, default = UserSettings)'. – tbicr
@tbicr ah, to miłe, dziękuję, edytowanie odpowiedzi. –
Dziękujemy! Dokładnie to musiałem wiedzieć. Wszystko działa zgodnie z oczekiwaniami! –