型号:
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”中引用。
答案 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")))