AttributeError: 'InstrumentedList' objet n'a pas d'attribut
J'ai ces 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
Lorsque j'essaie d'exécuter ceci, j'obtiens cette erreur de code dans la section "si la valeur est True" clause:
AttributeError: 'InstrumentedList' object has no attribute 'upvotes'
J'ai essayé de donner Voteinfo sa propre identité et en ajoutant uselist=False à la relation. J'ai essayé de remplacer la relation à la chose de VoteThing à Voteinfo, mais cela n'a pas aide non plus. Je ne sais pas ce qu'est un InstrumentedList est. Ce qui se passe?
depuis
Oui, je suis de passage d'une chose: thing1 = Truc(), user1 = User(), voteinfo1 = Voteinfo(thing1), votething1 = VoteThing(user1, thing1, True)
thing
est un paramètre à __init__
, je suppose que vous êtes de passage lorsque vous instanciez le VoteThing. Donc, ce que vous êtes de passage?Oui, je suis de passage d'une chose: thing1 = Truc(), user1 = User(), voteinfo1 = Voteinfo(thing1), votething1 = VoteThing(user1, thing1, True)
OriginalL'auteur Jonathan Ong | 2011-10-06
Vous devez vous connecter pour publier un commentaire.
Comme expliqué dans la documentation, ici : https://docs.sqlalchemy.org/en/latest/orm/basic_relationships.html#one-to-one, vous devez ajouter uselist=False pas à la relation, mais à la backref.
OriginalL'auteur madjar