Thank you very much! On Wednesday, August 1, 2012 4:20:23 PM UTC+2, Michael Bayer wrote: > > oh, sorry, that's a mixin. this combination of variables is not supported > at this time. You need to use an event: > > from sqlalchemy import event > from sqlalchemy.orm import mapper > @event.listens_for(mapper, "mapper_configured") > def set_num_children(mapper, cls): > if not issubclass(cls, MPTT): > return > > mptt2 = aliased(cls) > cls.num_children = column_property( > select([func.count(cls.id)]).where(cls.parent_id == > mptt2.id)) > > > > > On Aug 1, 2012, at 7:20 AM, Sergey Kucheryavski wrote: > > Thanks Michael, I greatly appreciate your help. But I am still a bit > confused. To set the attribute I need to have the alias for MPTT (or, > actually any class that inherits MPTT mixin class) table. But I can not use > aliased() neither inside the MPTT definition nor after it — in both cases > I get the mapping error. > > On Wednesday, August 1, 2012 3:46:56 AM UTC+2, Michael Bayer wrote: >> >> >> On Jul 31, 2012, at 11:42 AM, Sergey Kucheryavski wrote: >> >> I would like to use Mixin to make a base class for MPTT trees, just as an >> example >> >> class MPTT(object): >> @declared_attr >> def __tablename__(cls): >> return cls.__name__.lower() >> >> id = db.Column(db.Integer, primary_key = True) >> level = db.Column(db.Integer, nullable = False) >> lft = db.Column(db.Integer, nullable = False) >> rgt = db.Column(db.Integer, nullable = False) >> >> @declared_attr >> def parent_id(cls): >> return db.Column(db.Integer, db.ForeignKey(cls.id)) >> >> @declared_attr >> def num_children(cls): >> mptt2 = aliased(cls) >> return >> column_property(select([func.count(cls.id)]).where(cls.parent_id >> == mptt2.id)) >> >> >> >> yeah num_children() is evaluated within declarative's metaclass, before >> MPTT is mapped. So you have to set that attribute on after the fact: >> >> mptt2 = aliased(cls) >> MPTT.num_children = column_property(....) >> >> docs (see the last example): >> >> >> http://docs.sqlalchemy.org/en/rel_0_7/orm/mapper_config.html#using-column-property >> >> >> > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To view this discussion on the web visit > https://groups.google.com/d/msg/sqlalchemy/-/3tDxuZQ9VbwJ. > To post to this group, send email to sqlalchemy@googlegroups.com. > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > > >
-- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To view this discussion on the web visit https://groups.google.com/d/msg/sqlalchemy/-/xpFtuJ5a6YcJ. To post to this group, send email to sqlalchemy@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.