【问题标题】:flask-SQLAlchemy: 'NoneType' object has no attribute 'filter_by' error when adding relationsflask-SQLAlchemy:“NoneType”对象在添加关系时没有属性“filter_by”错误
【发布时间】:2017-11-06 01:03:32
【问题描述】:

我正在尝试为我的数据库创建以下结构:

我有一个父类UserModel,其中ChefModelCustomerModel 作为孩子。一切正常,直到我尝试在 OrderModel 和两个类之间添加关系。在对UserModelChefModel 的所有调用中,我收到以下错误。例如,当我尝试寻找厨师时:

    File "C:\Users\Moham\Documents\Food order\resources\chef.py", line 60, in get
    users = ChefModel.query.filter_by(active = True).all()
AttributeError: 'NoneType' object has no attribute 'filter_by'

这是我的 ChefModel:

class ChefModel(UserModel):
    __tablename__ = 'chefs'
    id = db.Column(db.Integer, db.ForeignKey('users.id'), primary_key = True)
    food_items = db.relationship("FoodItemModel", backref="chef", lazy=True)
    __mapper_args__ = {'polymorphic_identity':'chefs'}

客户模型:

class CustomerModel(UserModel):
    __tablename__ = 'customers'
    id = db.Column(db.Integer, db.ForeignKey('users.id'), primary_key = True)   
    __mapper_args__ = {'polymorphic_identity':'customers'}

和订单模型:

class OrderModel(db.Model):
    __tablename__ = 'orders'
    order_id = db.Column(db.Integer, primary_key = True)    
    updated_date = db.Column(db.DateTime, default=datetime.utcnow())
    description = db.Column(db.String(254)) 
    food_items = db.relationship("FoodItemModel", secondary = association_table)
    customer_id = db.relationship(db.Integer, db.ForeignKey('customers.id')) //if remove this line
    chef_id = db.relationship(db.Integer, db.ForeignKey('chefs.id')) //and this line, calls are normal

我做错了什么?

【问题讨论】:

  • 也许问题出在过滤器上?试试users = ChefModel.query.filter(ChefModel.active.is_(True)).all()
  • UserModel 基类是什么样的?

标签: python flask flask-sqlalchemy


【解决方案1】:

我认为您在 OrderModel 中错误地指定了 customer_id 和 chef_id 列。尝试做这样的事情:

class OrderModel(db.Model):
    __tablename__ = 'orders'
    order_id = db.Column(db.Integer, primary_key = True)
    updated_date = db.Column(db.DateTime, default=datetime.utcnow())
    description = db.Column(db.String(254)) 
    customer_id = db.Column(db.Integer, db.ForeignKey("customers.id"))
    chef_id = db.Column(db.Integer, db.ForeignKey("chefs.id"))

【讨论】:

    猜你喜欢
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 2022-11-03
    • 2018-10-30
    • 1970-01-01
    相关资源
    最近更新 更多