嗨,我正在尝试做一个简单的应用程序,用户可以创建新的鸡尾酒。因此,我有两个有很多关系的模型
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请求,则发送表单。如果是帖子,我会尝试创建鸡尾酒对象,然后将其保存在数据库中:
^{pr2}$我得到属性错误:
'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')
谢谢你
我认为您的错误实际上不是来自
c = Cocktail()
行。在问题就在这条线上
^{pr2}$cocktail_ingredients
是一个列表。您正在向c.ingredients
追加一个列表,而您应该只将Ingredient
的实例追加到它。您想改为使用.extend
:相关问题 更多 >
编程相关推荐