Flask播放列表应用添加歌曲时报int()参数不能为Row类型错误如何解决
错误原因
SelectField的choices参数格式错误
你直接将db.session.query(Song.id,Song.title).filter(...).all()的返回值赋值给choices,SQLAlchemy 1.4及以上版本该查询返回的是Row对象序列,不是WTForms要求的(值, 显示文本)元组序列,coerce=int尝试对Row对象做类型转换时触发了报错。- 视图函数存在变量名拼写错误
表单验证通过后的代码里你写的是playlists.songs.append(song),但前面定义的变量名是playlist,多写了后缀s,执行到这一步也会抛出名称不存在的错误。
修复方案
- 修改
choices赋值逻辑,将查询结果手动转为元组列表:
form.song.choices = [ (song.id, song.title) for song in db.session.query(Song.id,Song.title) .filter(Song.id.notin_(curr_on_playlist)) .all() ]
- 修正视图里的变量拼写错误:
# 把 playlists.songs.append(song) 替换为下面的代码 playlist.songs.append(song)
额外注意
你的Playlist类里的__repr__方法少写了一个后缀下划线,不符合Python魔术方法的命名规范,正确写法是:
def __repr__(self): return f"<Playlist {self.name}-{self.description}.>"
内容的提问来源于stack exchange,提问作者naitheas
相关产品推荐
相关产品推荐

