首页 > 解决方案 > 为什么 SQLAlchemy 中的多对多关系显示 Nonetype?

问题描述

Base = declarative_base()

   class Products(Base):
    __tablename__ = 'tb_products'
    #__table_args__ = {'extend_existing': True}
    prod_id = Column(Integer, primary_key=True)
    prod_category = Column(Integer,ForeignKey('tb_categories.ctg_id'))
    category = relationship("Categories",back_populates="product") # many to one
    prod_name = Column(String(100), nullable=False)
    description = Column(String(100), nullable=False)
    image = Column(String(100), nullable=False,default='default.jpg')
    qty_available = Column(Integer, nullable=False,default=0)
    regular_price = Column(DECIMAL,nullable=False,default=0.0)
    discounted_price = Column(DECIMAL,nullable=False,default=0.0)
    product_rating = Column(DECIMAL,nullable=False,default=0.0)

def __init__(self, prod_name = "test", description = "Dummy desciption",image = 
               "Dummy.png",qty_available = 10,regular_price = 1000,discounted_price = 
                800,product_rating = 0.0):
    self.prod_name = prod_name
    self.description = description
    self.image = image
    self.qty_available = qty_available
    self.regular_price = regular_price
    self.discounted_price = discounted_price
    self.product_rating = product_rating



class Cart(Base):
    __tablename__ = 'tb_cart'
    #__table_args__ = {'extend_existing': True}
    cart_id = Column(Integer, ForeignKey('tb_user.userid'), primary_key=True) 
    user = relationship("User",back_populates='cart') # one to one

class Cart_Products(Base):
__tablename__ = 'tb_cart_products'
__table_args__ = {'extend_existing':True}
prod_id = Column(Integer, ForeignKey('tb_products.prod_id'),primary_key=True)
cart_id = Column(Integer, ForeignKey('tb_cart.cart_id'),primary_key=True)
products = relationship("Products")

当我打印尝试打印

cartObj = Cart()
cart_productsObj = Cart_Products()
userObj.cart = cartObj
cart_productsObj.products.append(productObj)
userObj.cart.cart_products.append(cart_productsObj)
print(f"&&&&&&&{type(cartObj.cart_products)}")
print(f"&&&&&&&{type(cart_productsObj.products)}")
print(f"$$$$$$${type(userObj.cart)}")
print(f"$$$$$$${type(cartObj.user)}")

它向我显示以下错误

File "/home/devendra/Python_WS/ecommerce-project/app.py", line 248, in addToCart
    cart_productsObj.products.append(productObj)
AttributeError: 'NoneType' object has no attribute 'append'

当我在用户和购物车之间实现一对一关系时,我遇到了同样的问题。它在我删除整个数据库并创建一个新数据库后解决了。但我想了解为什么会发生这些错误

此外,我想将关联对象用于多对多,这样我就不必使用手动查询。

标签: pythonsqlalchemy

解决方案


推荐阅读