AttributeError:'list'对象没有属性'_sa_instance_state' [英] AttributeError: 'list' object has no attribute '_sa_instance_state'

查看:2123
本文介绍了AttributeError:'list'对象没有属性'_sa_instance_state'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我得到以下错误,我不知道如何解决它。我认为它与 is_bestfriend 关系有关。

 文件/ usr /local/lib/python2.7/dist-packages/flask/app.py,第1836行,在__call__ 
中返回self.wsgi_app(environ,start_response)
文件/ usr / local / lib /python2.7/dist-packages/flask/app.py,第1820行,在wsgi_app
response = self.make_response(self.handle_exception(e))
文件/ usr / local / lib /python2.7/dist-packages/flask/app.py,第1403行,在handle_exception
reraise(exc_type,exc_value,tb)
文件/usr/local/lib/python2.7/ dist-packages / flask / app.py,第1817行,在wsgi_app
response = self.full_dispatch_request()
文件/usr/local/lib/python2.7/dist-packages/flask/ app.py,第1477行,在full_dispatch_request
中rv = self.handle_user_exception(e)
文件/usr/local/lib/python2.7/dist-packages/flask/app.py,第1381行,在handle_user_exception
reraise(exc_type,exc_value,tb)
文件/usr/local/lib/python2.7/dist-packages/flask/app.py,第14行75,在full_dispatch_request
rv = self.dispatch_request()
文件/usr/local/lib/python2.7/dist-packages/flask/app.py,1461行,在dispatch_request
返回self.view_functions [rule.endpoint](** req.view_args)
文件/usr/local/lib/python2.7/dist-packages/flask_login.py,第758行,在decoration_view
返回func(* args,** kwargs)
文件/home/peg/flask-Alembic/app/layout/view.py,第176行,在bestFriend
u = g.user .be_bestfriend(用户)
文件/home/peg/flask-Alembic/app/model.py,第84行,在be_bestfriend
self.is_bestfriend = [user]
文件/ usr / local / lib / python2.7 / dist-packages / sqlalchemy / orm / attributes.py,第220行,在__set__
instance_dict(instance),value,None)
文件/ usr /本地/ lib / python2.7 / dist-packages / sqlalchemy / orm / attributes.py,第780行,集合
value = self.fire_replace_event(state,dict_,value,old,initiator)
文件/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/attributes.py,第801行,在fire_replace _event
value = fn(state,value,previous,initiator或self._replace_token)
文件/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py ,第83行,在set_
newvalue_state = attributes.instance_state(newvalue)
AttributeError:'list'object has no attribute'_sa_instance_state'

model.py:

  friends = db.Table('friends' ,
db.Column('user_id',db.Integer,db.ForeignKey('users.id')),
db.Column('friend_id',db.Integer,db.ForeignKey(' users.id'))


class用户(db.Model):
id = db.Column(db.Integer,primary_key = True)
name = db.Column(db.String(50),index = True)
age = db.Column(db.Integer)
email = db.Column(db.String(50),index = True ,unique = True)
bestfriend_id = db.Column(db.Integer,db.ForeignKey('users.id'))

is_bestfriend = db.relationship('Users',uselist =假,remote_side = [id],po st_update = True)

is_friend = db.relationship('Users',#defining the relationship,Users is left side entity
secondary = friends,#indecates association table
primaryjoin = (friends.c.user_id == id),#条件链接左侧实体
secondaryjoin =(friends.c.friend_id == id),#cond if link right.s ent。和assoc表
backref = db.backref('friends',lazy ='dynamic'),#如何从右边访问
lazy ='dynamic'


def are_bestfriends(self,user):
return self.is_bestfriend ==用户

#好友管理
def be_bestfriend(self,user):
如果不是self.are_bestfriends(user):
self.is_bestfriend = [user]
user.is_bestfriend = [self]
return self
$ b $ p view.py:

$ $ p $ @ layout.route('/ bestFriend /< name>)
@login_required
def bestFriend(name):
user = Users.query.filter_by(name = name).first()
if user None:
flash('User%s not found。'%name)
return redirect(url_for('index'))
if user == g.user:
flash ('你不能自己最好的朋友')
return redirect(url_for('layout.user如果你是没有的话:
flash('不可能是最好的朋友'+名字+'',page = 1,sortby ='normal'))
u = g.user.be_bestfriend(user) ')
return redirect(url_for('layout.user',page = 1,sortby ='normal'))
db.session.add(u)
db.session.commit ()
flash('您现在是'+'+'!'的最好朋友)
返回重定向(url_for('layout.user',page = 1,sortby ='normal'))


解决方案

C> uselist =假。您应该设置单个模型实例,而不是包含它的列表。

  def be_bestfriend(self,user):
如果不是self.are_bestfriends(user):
self.is_bestfriend = user
user.is_bestfriend = self
return self


I get the following error, and I'm not sure how to fix it. I think it's related to the is_bestfriend relationship.

File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/usr/local/lib/python2.7/dist-packages/flask_login.py", line 758, in decorated_view
return func(*args, **kwargs)
File "/home/peg/flask-Alembic/app/layout/view.py", line 176, in bestFriend
u = g.user.be_bestfriend(user)
File "/home/peg/flask-Alembic/app/model.py", line 84, in be_bestfriend
self.is_bestfriend = [user]
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/attributes.py", line 220, in __set__
instance_dict(instance), value, None)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/attributes.py", line 780, in set
value = self.fire_replace_event(state, dict_, value, old, initiator)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/attributes.py", line 801, in fire_replace_event
value = fn(state, value, previous, initiator or self._replace_token)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 83, in set_
newvalue_state = attributes.instance_state(newvalue)
AttributeError: 'list' object has no attribute '_sa_instance_state'

model.py:

friends = db.Table('friends',
db.Column('user_id', db.Integer, db.ForeignKey('users.id')),
db.Column('friend_id', db.Integer, db.ForeignKey('users.id'))
)

class Users(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(50), index=True)
    age= db.Column(db.Integer )
    email = db.Column(db.String(50),index=True, unique= True)
    bestfriend_id = db.Column(db.Integer, db.ForeignKey('users.id'))

    is_bestfriend = db.relationship( 'Users', uselist=False, remote_side=[id], post_update=True)

    is_friend = db.relationship('Users', #defining the relationship, Users is left side entity
        secondary = friends, #indecates association table
        primaryjoin = (friends.c.user_id == id), #condition linking the left side entity
        secondaryjoin = (friends.c.friend_id == id),#cond if link right.s ent. with assoc table
        backref = db.backref('friends', lazy = 'dynamic'),#how accessed from right
        lazy = 'dynamic'
    ) 

    def are_bestfriends(self, user):
        return self.is_bestfriend == user

    #best friends management
    def be_bestfriend(self, user):
        if not self.are_bestfriends(user):
            self.is_bestfriend = [user]
            user.is_bestfriend = [self]
            return self

view.py:

@layout.route('/bestFriend/<name>')
@login_required
def bestFriend(name):
    user = Users.query.filter_by(name = name).first()
    if user is None:
        flash('User %s not found.' % name)
        return redirect(url_for('index'))
    if user == g.user:
        flash('You can\'t Best Friend yourself!')
        return redirect(url_for('layout.user', page=1,sortby='normal'))
    u = g.user.be_bestfriend(user)
    if u is None:
        flash('Cannot be best Friend ' + name + '.')
        return redirect(url_for('layout.user', page=1,sortby='normal'))
    db.session.add(u)
    db.session.commit()
    flash('You are now BestFriend with ' + name + '!')
    return redirect(url_for('layout.user', page=1,sortby='normal'))

解决方案

You are assigning a list to a relationship where uselist=False. You should set the single model instance, rather than a list containing it.

def be_bestfriend(self, user):
    if not self.are_bestfriends(user):
        self.is_bestfriend = user
        user.is_bestfriend = self
        return self

这篇关于AttributeError:'list'对象没有属性'_sa_instance_state'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆