gpt4 book ai didi

python - flask /SQLAlchemy 错误 : TypeError: Incompatible collection type: [model] is not list-like

转载 作者:太空狗 更新时间:2023-10-29 22:26:41 25 4
gpt4 key购买 nike

我在非常简单的应用程序中遇到了棘手的问题。我尝试了许多不同的方法,但仍然无法弄清楚我做错了什么。

我使用Flask + flask.ext.sqlalchemy,我的模型关系也是多对多

authorship = db.Table('authorship',
db.Column('author_id', db.Integer, db.ForeignKey('author.id')),
db.Column('book_id', db.Integer, db.ForeignKey('book.id'))
)


class Book(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(80), unique=False)
description = db.Column(db.String(), unique=False)

authors = db.relationship('Author', secondary=authorship, backref=db.backref('books', lazy='dynamic'))

def __init__(self, title, description, authors):
self.title = title
self.description = description
self.authors = authors

def __repr__(self):
return self.title


class Author(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))

def __init__(self, name):
self.name = name

def __repr__(self):
return self.name

无论我如何更改我的模型并处理关系,我仍然会遇到相同的错误(作者或其他模型):

TypeError: Incompatible collection type: Author is not list-like

当我尝试添加新书时出现错误。

我将这些模型与 WTForms 一起使用:

@app.route('/add_book', methods=['GET', 'POST'])
def add_book():
if not session.get('logged_in'):
abort(401)
form = AddBookForm(request.form)
if request.method == 'POST' and form.validate():
a = Author(form.author.data)
b = Book(form.title.data, form.description.data, a)
db.session.add(b)
flash("book added")
return render_template('add_book.html', form=form)

最佳答案

如果我没记错的话那是 M2M 关系 Books - Authors,所以不是

b = Book(form.title.data, form.description.data, a)

你可能应该这样做

b = Book(form.title.data, form.description.data, [a])

因为它需要一个列表,而您只给了它一个对象。

关于python - flask /SQLAlchemy 错误 : TypeError: Incompatible collection type: [model] is not list-like,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19606745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com