[英]The hybrid_property decorator: can't set attribute error
I create an app in __init__.py
as follows:我在
__init__.py
中创建了一个应用程序,如下所示:
from flask_bcrypt import Bcrypt
app = Flask(__name__, static_folder='static')
bcrypt = Bcrypt(app)
and I use this app
instance when creating database models as follows:我在创建数据库模型时使用这个
app
实例,如下所示:
from sqlalchemy.ext.hybrid import hybrid_property
from app import bcrypt, db
class User(db.Model):
name = db.Column(db.String, nullable=False)
_password = db.Column(db.String)
@hybrid_property
def password(self) -> str:
return self._password
@password.setter
def _set_password(self, password: str):
self._password = bcrypt.generate_password_hash(password)
And I try to initiate an instance as follows (this is the way that I want to do it as it looks cleaner):我尝试按如下方式启动一个实例(这是我想做的方式,因为它看起来更干净):
user = User(name='foo', password='bar')
but when I commit this to a database I get the following error: AttributeError: can't set attribute .但是当我将其提交到数据库时,我收到以下错误: AttributeError: can't set attribute 。 This clears if I use:
如果我使用,这将清除:
user = User(name='foo', _password='bar')
I guess I'm not using the @hybrid_property
decorator properly?我想我没有正确使用
@hybrid_property
装饰器? I want to use the user = User(name='foo', password='bar')
syntax if possible.如果可能,我想使用
user = User(name='foo', password='bar')
语法。
Thanks for any help here.感谢您在这里的任何帮助。
Whether you use @hybrid_property
decorator or a native python object's @property
decorator you must retain same attribute name used in property definition for setter or getter methods.无论您使用
@hybrid_property
装饰器还是本机 python 对象的@property
装饰器,您都必须为 setter 或 getter 方法保留在属性定义中使用的相同属性名称。
Here in your case def _set_password()
should be def password()
.在您的情况下, def
_set_password()
应该是def password()
。 Your code should look like this:您的代码应如下所示:
@hybrid_property
def password(self):
return self._password_hash
@password.setter
def password(self, plaintext):
self._password_hash = generate_password_hash(plaintext)
Detail Explanation: https://github.com/sqlalchemy/sqlalchemy/issues/4332详细说明: https://github.com/sqlalchemy/sqlalchemy/issues/4332
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.