多对多关系 - 删除项目

时间:2021-07-03 11:13:21

标签: flask sqlalchemy flask-sqlalchemy

型号:

class Cecha(db.Model):
    __tablename__='cechy'
    id = db.Column(db.Integer, primary_key = True)
    nazwa = db.Column(db.String)

cechy_asort = db.Table('cechy_asort',
    db.Column('id_cechy', db.Integer, db.ForeignKey('cechy.id')),
    db.Column('id_asortymentu', db.Integer, db.ForeignKey('asortymenty.id')))

class Asortyment(db.Model):
    __tablename__ = 'asortymenty'
    id = db.Column(db.Integer, primary_key=True)
    nazwa = db.Column(db.String(64), unique = True, index = True, nullable = False)

    zamowienia = db.relationship('Zamowienie', backref='asortyment', lazy='dynamic', cascade='all,delete')
    cecha = db.relationship('Cecha', secondary=cechy_asort, backref=db.backref('asortymenty', lazy='dynamic'), lazy='joined')

    def ma_ceche(self, id_cechy):
        cecha = Cecha.query.filter_by(id=id_cechy).first()
        if cecha is None:
            return False
        if not cecha in self.cecha:
            return False
        return cecha

    def dodaj_ceche(self,id_cechy):
        if not self.ma_ceche(id_cechy):
            cecha = Cecha.query.filter_by(id=id_cechy).first()
            self.cecha.append(cecha)
            db.session.commit()

    def usun_ceche(self,id_cechy):
        if self.ma_ceche(id_cechy):
            cecha = Cecha.query.filter_by(id=id_cechy).first()
            self.cecha.remove(cecha)
            db.session.commit()

class Grupa_asort(db.Model):
    __tablename__ = 'grupy_asort'
    id = db.Column(db.Integer, primary_key=True)
    nazwa = db.Column(db.String(64), unique = True, index = True)

    asortymenty = db.relationship('Asortyment', backref = 'grupa_asort', lazy='dynamic', cascade='all,delete')

问题是从表 Asortyment 中删除项目,如果有关系:

 Asortyment.query.filter_by(id_grupy=id_grupy).delete()

错误是: cursor.execute(语句,参数) psycopg2.errors.ForeignKeyViolation:更新或删除表“asortymenty”违反表“cechy_asort”上的外键约束“cechy_asort_id_asortymentu_fkey” 详细信息:键 (id)=(1446) 仍从表“cechy_asort”中引用。

1 个答案:

答案 0 :(得分:1)

cechy_asort = db.Table('cechy_asort',
    db.Column('id_cechy', db.Integer, db.ForeignKey('cechy.id')),
    db.Column('id_asortymentu', db.Integer, db.ForeignKey('asortymenty.id', ondelete="CASCADE")))   
相关问题