Le problème tente de récupérer un objet avec des relations à partir de la base de données à l'aide de SQLAlchemy sur Pyramid. Ce que je veux essentiellement, c'est créer les objets que je dois récupérer dans la base de données pour compléter les données nécessaires à une page Web.
Lorsque j'essaie d'accéder à l'url/poll/{id} (en utilisant un identifiant de sondage valide, par exemple:/poll/1) pour obtenir la page, j'obtiens cette erreur: AttributeError: l'objet 'Query' n'a pas d'attribut '_sa_instance_state'. Quelle est l'erreur?
C'est la partie pertinente du modèle:
class Question(Base):
__tablename__ = 'question'
id = Column(Integer, primary_key=True)
text = Column(String(250))
type_id = Column(Integer, ForeignKey('type.id'))
type = relationship(Type)
poll_id = Column(Integer, ForeignKey('poll.id'))
poll = relationship(Poll)
def __init__(self, text, type, poll):
self.text = text
self.type = type
self.poll = poll
class Option(Base):
__tablename__ = 'option'
id = Column(Integer, primary_key=True)
text = Column(String(250))
question_id = Column(Integer, ForeignKey('question.id'))
question = relationship(Question)
def __init__(self, text, question):
self.text = text
self.question = question
Celui-ci est la partie du code qui me pose problème. Le débogueur pointe vers l'avant-dernière ligne (l'objet Option).
if request.matchdict['id'] != None:
pinst = session.query(Poll).get(request.matchdict['id'])
typeq = session.query(Type).first()
qinst = session.query(Question).filter_by(poll=pinst)
lopt = session.query(Option).filter_by(question=qinst)
return {'question':qinst, 'arroptions':lopt, 'type':typeq}
Merci d'avance!
qinst
est un Query
, pas un Question
. Vous voulez probablement:
qinst = session.query(Question).filter_by(poll=pinst).one()
ou
qinst = session.query(Question).filter_by(poll=pinst).first()
Vous pouvez également ajouter une backref sur Question
pour pouvoir passer de Poll
à Question
:
class Question(Base):
...
poll = relationship(Poll, backref="question")
qinst = pinst.question