2016-08-26 32 views
-1

を取るI次SQLAlchemyのクラスがあります。私は、プロパティを使用する場合SQLAlchemyのテーブルプロパティは、正確に2つの引数(与えられた1)

class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    password = db.Column(db.String(100)) 

    @property 
    def encrypt_password(self, password): 
     self.password = hash_password(password) 

が、私はエラーencrypt_password() takes exactly 2 arguments (1 given)を取得します。

user = db.session.query(User).filter_by(id=id).one() 
user.encrypt_password('mypassword') 

なぜこれは機能しませんか?パスワードを設定するプロパティを実装するにはどうすればよいですか?

+2

'@のproperty'デコレータを削除します。 'encrypt_password'はメソッドであり、プロパティではありません。 – univerio

答えて

0

プロパティのgettersetterと定義しました。これが関数なのでpropertyを削除するか、プロパティを正しく定義してください。

プロパティルートに行く場合は、password属性の名前を変更し、ゲッターのプロパティを使用してアクセスします。 hybrid_propertyを使用して、列が依然として直接照会可能であるようにします。

from sqlalchemy.ext.hybrid import hybrid_property 

_password = db.Column('password', db.String) 

@hybrid_property 
def password(self): 
    return self._password 

@password.setter 
def password(self, value): 
    self._password = hash_password(value) 
user.password = 'stack overflow' # gets hashed 
user.password # hashed value 
session.query(User).filter(User.password.is_(None)) # query for users without passwords 
関連する問題