创建新对象将返回AttributeError:“list”对象没有属性“\u sa_instance_state”

2024-05-13 22:33:46 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我正在尝试做一个简单的应用程序,用户可以创建新的鸡尾酒。因此,我有两个有很多关系的模型

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')

谢谢你


Tags: nameidtruedb关系tablecolumninteger
1条回答
网友
1楼 · 发布于 2024-05-13 22:33:46

我认为您的错误实际上不是来自c = Cocktail()行。在

问题就在这条线上

c.ingredients.append(cocktail_ingredients)

cocktail_ingredients是一个列表。您正在向c.ingredients追加一个列表,而您应该只将Ingredient的实例追加到它。您想改为使用.extend

^{pr2}$

相关问题 更多 >