El objeto ‘Ninguno’ no tiene ningún atributo ‘propietario’ al intentar acceder a la relación

Estoy tratando de cargar un valor en el Toy.owner relationshiop. Estos son mis modelos:

 class User(db.Model): __tablename__ = 'User' id = db.Column(db.Integer, primary_key=True) type = db.Column(db.String(50)) nickname = db.Column(db.String(255)) email = db.Column(db.String(255)) password = db.Column(db.String(255)) __mapper_args__ = { "polymorphic_on":type, 'polymorphic_identity':'user', 'with_polymorphic':'*' } class Owner(User): __tablename__ = 'Owner' id = db.Column(db.Integer, db.ForeignKey('User.id', ondelete='CASCADE'), primary_key=True) owner_id = db.Column(db.Integer, autoincrement=True, primary_key=True, unique=True) toys = db.relationship('Toy', backref='owner', lazy='dynamic') __mapper_args__ = {'polymorphic_identity':'owner'} class Toy(db.Model): __tablename__ = 'Toy' id = db.Column(db.Integer, primary_key=True) owner_id = db.Column(db.Integer, db.ForeignKey('Owner.owner_id')) 

Esta vista debe usar clicked_toy.owner_id :

 @app.route('/', methods=['GET','POST']) def toy_info(toy_id): clicked_toy = db.session.query(Toy).filter(Toy.id == toy_id).first() owner = db.session.query(Owner).filter(Owner.owner_id == clicked_toy.owner.owner_id).first() return render_template('toy_info.html', clicked_toy=clicked_toy, owner=owner) 

Esto no funciona, me salió el error:

 File ".../controller.py", line 67, in toy_info owner = db.session.query(Owner).filter(Owner.owner_id == clicked_toy.owner.owner_id).first() AttributeError: 'NoneType' object has no attribute 'owner' 

Cuando intenté llamar a clicked_toy.owner_id en clicked_toy.owner_id lugar, obtuve el mismo error:

  File ".../controller.py", line 67, in toy_info owner = db.session.query(Owner).filter(Owner.owner_id == clicked_toy.owner_id).first() AttributeError: 'NoneType' object has no attribute 'owner_id' 

¿Qué me falta y cómo puedo solucionarlo?

.first() devuelve None si no hubo resultados. Así que su consulta para clicked_toy no clicked_toy resultados.

Puede usar get lugar de filter cuando todo lo que está haciendo es filtrar en la clave principal. Flask-SQLAlchemy va un paso más allá al permitirte subir 404 si no hay resultados.

 clicked_toy = Toy.query.get_or_404(toy_id)