2016-05-18 13 views
-1

Ich erhalte diesen Fehler TypeError: __init__() takes exactly 1 argument (5 given), wenn ich versuche, eine Login-Datenbank zu speichern.Initialisiere Konstruktor mit mehreren Parametern

logs_transactions = Logs_transactions('test', 'test', 910000000, current_user.id) 
db.session.add(logs_transactions) 
db.session.commit() 

class Logs_transactions(db.Model): 
    __tablename__ = 'logs_transactions' 
    id = db.Column(db.Integer, primary_key=True) 
    type = db.Column(db.String(100)) 
    reference = db.Column(db.String(500)) 
    phone_number = db.Column(db.Integer) 
    user_id = db.Column(db.Integer, db.ForeignKey('users_user.id')) 

    def __init__(self, **kwargs): 
     super(User, self).__init__(**kwargs) 

Ich weiß, dass ich so etwas wie dieses verwenden:

def __init__(self, type, reference, phone_number, user_id): 
    self.type = type 
    self.reference = reference 
    self.phone_number = phone_number 
    self.user_id = user_id 

Aber auf diese Weise ist ärgerlich, wenn ich viele Parameter haben. Ich denke also, dass der obige Konstruktor gleichwertig ist, aber scheinbar nicht funktioniert. Grundsätzlich möchte ich die explizite self.xxx für alle Parameter vermeiden.

Antwort

1

Die beiden sind nicht gleichwertig. kwargs benötigt Schlüsselwörter, Sie übergeben Positionsargumente. SQLAlchemy-Modelle verfügen bereits über einen Initialisierer, der Kwargs benötigt, Sie müssen keine eigenen bereitstellen.

Logs_transaction(type='test', reference='test', ...) 
Verwandte Themen