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.

Reply via email to