Skip to main content
 首页 » 编程设计

python之Mongoengine 属性错误

2025年05月04日26lori

我正在尝试使用 Flask-Mongoengine 和 Flask-Login 为应用编写授权代码。我收到了这个奇怪的错误:

File "/usr/lib/python3.5/site-packages/mongoengine/base/document.py", line 188, in __setattr__ 
    super(BaseDocument, self).__setattr__(name, value) 
  File "/usr/lib/python3.5/site-packages/mongoengine/base/fields.py", line 132, in __set__ 
    if instance._initialised: 
AttributeError: _initialised 

我的模型.py:

from app import app, db 
from flask.ext.login import LoginManager 
 
 
login_manager = LoginManager() 
login_manager.init_app(app) 
 
 
class User(db.Document): 
    email = db.StringField(required=True) 
    first_name = db.StringField(max_lenght=40, required=True) 
    last_name = db.StringField(max_lenght=40, required=True) 
    password = db.StringField(required=True) 
 
    def __init__(self, email, first_name, last_name, password): 
        self.email = email 
        self.first_name = first_name 
        self.last_name = last_name 
        self.password = password 
 
    def is_authenticated(self): 
        return True 
 
    def is_active(self): 
        return True 
 
    def is_anonymous(self): 
        return False 
 
   def get_id(self): 
        return self.email 

我试过超越类(class),但没有帮助。

https://github.com/MongoEngine/flask-mongoengine/issues/156

请您参考如下方法:

Mongoengine 不需要您定义 __init__。

class User(db.Document): 
    email = db.StringField(required=True) 
    first_name = db.StringField(max_lenght=40, required=True) 
    last_name = db.StringField(max_lenght=40, required=True) 
    password = db.StringField(required=True) 
 
    def clean(self): 
        # clean will be called when you call .save() 
        # You can do whatever you'd like to clean data before save 
        self.password = str(self.password) 

那么你所要做的就是

user = User(email='email@gmail', first_name='hello', last_name='there', password=2342143213) 
user.save() 
print(user.id)