1
嗨我想做一个简单的应用程序,用户有能力创建新的鸡尾酒。因此,我有两个模型与多种关系创建一个新的对象返回AttributeError:'列表'对象没有属性'_sa_instance_state'
from . import db
assoc_table = db.Table('association',
db.Column('ingredient_id', db.Integer, db.ForeignKey('ingredients.id')),
db.Column('cocktail_id', db.Integer, db.ForeignKey('cocktails.id'))
)
class Ingredient(db.Model):
__tablename__ = 'ingredients'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True)
cost_price = db.Column(db.Float, default=0.0)
cocktails = db.relationship('Cocktail',
secondary=assoc_table,
backref=db.backref('ingredients'),
lazy='dynamic')
class Cocktail(db.Model):
__tablename__ = 'cocktails'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True)
serv_percentage = 0.25
sell_price = db.Column(db.Float)
而在视图中,我发送表单,如果它是一个GET请求。如果它是一个POST,我尝试创建鸡尾酒对象,然后将它保存在数据库:
@main.route('/new', methods=['GET', 'POST'])
def new():
form = CocktailForm()
form.ingredients.choices = [(i.id, i.name) for i in Ingredient.query.all()]
if form.validate_on_submit():
cocktail_name = form.name.data
cocktail_ingredients = Ingredient.query.filter(Ingredient.id.in_(form.ingredients.data)).all()
c = Cocktail()
c.name = form.name.data
c.ingredients.append(cocktail_ingredients)
db.session.add(c)
db.session.commit()
return redirect(url_for('.index'))
return render_template('new.html', form=form)
我得到AttributeError的:
在尝试创建一个空的'list' object has no attribute '_sa_instance_state'
Cocktail:
行
c = Cocktail()
我没有线索是什么问题。
我检查了很多答案,通常是有关人际关系,所以我真的不知道有什么错我的代码
这里是窗体类,但我认为这不是问题:
class CocktailForm(Form):
name = StringField('What is the coktail\'s name?', validators=[Required()])
ingredients = SelectMultipleField('Ingredients', coerce=int)
submit = SubmitField('Submit')
谢谢
谢谢@univerio我看不到它!我会upvote你的答案,但我不能:/ –
@ERodriguez请接受答案,如果它解决了你的问题。谢谢! – univerio
答案已接受! :) –