Обычно конструктор по умолчанию, унаследованный от db.Model
, достаточен без необходимости предоставления собственного. Конструктор модели по умолчанию будет принимать ключевые аргументы и присваивать эти значения правильным столбцам.
Я взял ваш код сверху и немного адаптировал его, чтобы показать это:
class User(db.Model):
__tablename__ = 'user'
name = db.Column(db.String())
class Playlist(db.Model):
"""
Model for storing playlist information belonging to a specific user
"""
__tablename__ = 'playlist'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(50))
created = db.Column(db.DateTime, default=func.now())
user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
user = db.relationship("User", backref=db.backref("playlists"))
def serialize(self):
return {
'id' : self.id,
'created' : self.created,
'title': self.title,
}
user = User(name="John")
playlist = Playlist(title="My playlist", user=user)
print(playlist.user)
print(user.playlists)
Когда вы передаете экземпляр пользователя в список воспроизведения, SQLAlchemy автоматически позаботится о назначении внешнего ключа для указания этому пользователю.
Если вы все еще хотели иметь специальный конструктор для Playlist, вы, вероятно, захотите добавить к нему super().__init__(*args, **kwargs)
, чтобы логика в базовом конструкторе все еще выполнялась.
Надеюсь, это поможет!