0
我有一个组织模型:与SQLAlchemy的防止父删除backref
class Organization(SharedModel):
name = db.Column(db.String(200), nullable=False)
和几个模型backref Organization
这样的:
class OrganizationBusinessLine(db.Model):
organization_id = db.Column(db.Integer, db.ForeignKey('organization.id'), nullable=False)
organization = db.relationship('Organization', foreign_keys=[organization_id],
single_parent=True,
backref=db.backref('businessLines', uselist=True))
name = db.Column(db.String(200), nullable=False)
当Organization
被删除,我希望所有OrganizationBusinessLine
s是与组织有关的删除,并且这工作得很好:
def test_that_children_of_organization_are_deleted(session)
organization_id = 1
organization = session.query(Organization).get(organization_id)
business_line_ids = [instance.id for instance in
session.query(OrganizationBusinessLine).filter_by(organization=organization).all()]
db.session.delete(instance)
db.session.commit()
for instance_id in business_line_ids:
assert session.query(OrganizationBusinessLine).get(instance_id) is None
但是当我删除一个业务线,相关的机构也被删除:
def test_that_parent_is_not_deleted(session):
business_line = session.query(OrganizationBusinessLine).first()
business_line_id = business_line.id
organization_id = business_line.organization_id
OrganizationBusinessLine.delete(business_line_id)
assert session.query(OrganizationBusinessLine).get(business_line_id) is None
assert session.query(Organization).get(organization_id) is not None # Fails
我曾尝试在backref
几个不同cascade=
-options,但我不能让“父”(Organization
)至不被删除。
默认cascade=
选项backrefs是according to the docs:
级联的默认行为仅限于所谓的保存,更新和合并设置级联。
我希望这些设置甚至不会删除“子”对象,但似乎这样做。
我正在我的本地SQLite数据库上运行测试,如果这很重要。
请张贴OrganizationBusinessLine.delete'的'定义。 –