我们为注册到系统的人员提供了一个User类.我们有一大堆属于用户的类(和插件添加更多).因此,如果用户被删除,他的东西应该被删除.所以这就是我们目前正在做的事情:
class User(Base):
id = Column(Integer, primary_key=True)
class Thing(Base):
user_id = Column(Integer, ForeignKey(User.id))
user = relationship(
User,
backref=backref("list_of_things",
cascade="all, delete-orphan"))
Run Code Online (Sandbox Code Playgroud)
这有效.
假设我们从不使用User.list_of_things:有没有办法将其排除在外?但仍然得到backref级联行为?如果我们需要User.list_of_things,我们当然可以添加它.但在那之前,把它留下来会很好.
你可以说"嗯,只是说出一个名字并且不在乎".这就是我们正在做的事情.两件事情:
User类上与其他插件和/或我们的主要属性发生冲突.小更新:对我们手头的问题的一个未经测试的解决方案将是一个混合线,但它不会回答没有名称的backrefs的问题:
class OwnedbyUserMixin(object):
@declared_attr
def user_id(cls):
return Column(Integer, ForeignKey(User.id),
nullable=False)
@declared_attr
def user(cls):
return relationship(
User,
backref=backref("list_of_" + cls.__tablename__,
cascade="all, delete-orphan"))
Run Code Online (Sandbox Code Playgroud)