2017-07-04 3 views
0

je suivant les modèles et les associations:Supprimer tout dans un grand nombre de many de table secondaire dans sqlalchemy

class CartProductsAssociation(db.Model): 
    __tablename__ = 'cart_products_association' 
    cart_id = db.Column(db.Integer, db.ForeignKey('carts.id',ondelete='CASCADE'),primary_key=True) 
    product_id = db.Column(db.Integer, db.ForeignKey('products.id',ondelete='CASCADE'), primary_key=True) 
    quantity = db.Column(db.Integer) 

    product = db.relationship("Product", backref="cart_associations", cascade="all,delete",passive_deletes=True) 
    cart = db.relationship("Cart", backref="product_associations",cascade="all,delete",passive_deletes=True) 


class Product(db.Model): 
    __tablename__ = 'products' 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String) 
    img_path = db.Column(db.String) 

    price = db.Column(db.Float, default=0.0) 

    product_categories = db.relationship(
     "ProductCategory", 
     secondary=product_product_categories, 
     back_populates="products") 

    carts = db.relationship("Product", secondary="cart_products_association",passive_deletes=True,cascade="all,delete") 

class Cart(db.Model): 
    __tablename__ = 'carts' 
    id = db.Column(db.Integer, primary_key=True) 

    branch_id = db.Column(db.Integer, db.ForeignKey('branch.id')) 
    branch = db.relationship("Branch", back_populates="carts") 

    page_id = db.Column(db.Integer, db.ForeignKey('pages.id')) 
    page = db.relationship("Page", back_populates="carts") 


    shopper_id = db.Column(db.String, db.ForeignKey('shoppers.fb_user_id')) 
    shopper = db.relationship(
     "Shopper", 
     back_populates="carts") 

    products = db.relationship("Product", secondary="cart_products_association") 
    cart_status = db.Column(db.Enum('user_unconfirmed','user_confirmed','client_unconfirmed','client_confirmed', name='cart_status'), default='user_unconfirmed') 

Quand je suis en train de supprimer un produit que je obtiens l'erreur suivante: AssertionError

AssertionError: Dependency rule tried to blank-out primary key column 'cart_products_association.cart_id' on instance '<CartProductsAssociation at 0x7f5fd41721d0>' 

Comment puis-je le résoudre?

+1

double possible de [règle de dépendance a essayé de hachurer clé primaire dans SQLAlchemy, lorsque la contrainte de clé étrangère fait partie de la clé primaire composite] (https://stackoverflow.com/ questions/23699651/dependency-rule-essayé-de-effacer-clé-primaire-dans-sqlalchemy-when-foreign-key-c) –

Répondre

0

il a résolu le problème:

product = models.Product.query.get(product_id) 

for ass in product.cart_associations: 

    db.session.delete(ass) 

db.session.delete(product) 
db.session.commit()