Also improves some naming in the examples.
Change-Id: I51e5b1d9a730885aed10e5e6ade2123f5e736359
Pull-request: https://github.com/zzzeek/sqlalchemy/pull/306
With :attr:`.declared_attr.cascading`, individual behaviors can be
applied::
- class HasSomeAttribute(object):
+ class HasIdMixin(object):
@declared_attr.cascading
- def some_id(cls):
+ def id(cls):
if has_inherited_table(cls):
return Column(ForeignKey('myclass.id'), primary_key=True)
else:
return Column(Integer, primary_key=True)
- return Column('id', Integer, primary_key=True)
-
- class MyClass(HasSomeAttribute, Base):
- ""
+ class MyClass(HasIdMixin, Base):
+ __tablename__ = 'myclass'
# ...
class MySubClass(MyClass):
function should be invoked **for each class in the hierarchy**, just like
it does for ``__tablename__``::
- class HasId(object):
+ class HasIdMixin(object):
@declared_attr.cascading
def id(cls):
if has_inherited_table(cls):
- return Column('id',
- Integer,
- ForeignKey('person.id'), primary_key=True)
+ return Column(ForeignKey('person.id'), primary_key=True)
else:
- return Column('id', Integer, primary_key=True)
+ return Column(Integer, primary_key=True)
- class Person(HasId, Base):
+ class Person(HasIdMixin, Base):
__tablename__ = 'person'
discriminator = Column('type', String(50))
__mapper_args__ = {'polymorphic_on': discriminator}
Below, both MyClass as well as MySubClass will have a distinct
``id`` Column object established::
- class HasSomeAttribute(object):
+ class HasIdMixin(object):
@declared_attr.cascading
- def some_id(cls):
+ def id(cls):
if has_inherited_table(cls):
- return Column(
- ForeignKey('myclass.id'), primary_key=True)
+ return Column(ForeignKey('myclass.id'), primary_key=True)
else:
return Column(Integer, primary_key=True)
- return Column('id', Integer, primary_key=True)
-
- class MyClass(HasSomeAttribute, Base):
- ""
+ class MyClass(HasIdMixin, Base):
+ __tablename__ = 'myclass'
# ...
class MySubClass(MyClass):