AttributeError: 'InstrumentedList' object has no attribute

匿名 (未验证) 提交于 2019-12-03 08:48:34

问题:

I have these tables tables:

class Thing(Base):     __tablename__ = 'thing'     id = Column(Integer, primary_key=True)  class User(Base):     __tablename__ = 'user'     id = Column(Integer, primary_key=True)  class Voteinfo(Base):     __tablename__ = 'voteinfo'     thing_id = Column(Integer, ForeignKey('thing.id'), primary_key=True)     thing = relationship('Thing', backref='voteinfo')     upvotes = Column(Integer)     downvotes = Column(Integer)      def __init__(self, thing)         self.thing = thing  class VoteThing(Base):     __tablename__ = 'votething'     id = Column(Integer, primary_key=True)     voter_id = Column(Integer, ForeignKey('voter.id'))     voter = relationship('Voter', backref='votescast')     thing_id = Column(Integer, ForeignKey('thing.id'))     thing = relationship('Thing', backref='votesreceived')     value = Column(Boolean)      def __init__(self, voter, thing, value):         if value is True:             thing.voteinfo.upvotes += 1         else:             thing.voteinfo.downvotes += 1 

When I try to run this, I get this error code in the "if value is True" clause:

AttributeError: 'InstrumentedList' object has no attribute 'upvotes' 

I've tried giving Voteinfo its own unique ID and adding uselist=False to the relationship. I've tried replacing the relationship to thing from VoteThing to Voteinfo, but that didn't help either. I don't know what an InstrumentedList is. What is going on?

回答1:

As explained in the documentation, here : https://docs.sqlalchemy.org/en/latest/orm/basic_relationships.html#one-to-one, you have to add uselist=False not to the relationship, but to the backref.

thing = relationship('Thing', backref=backref('voteinfo', uselist=False)) 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!