On Sep 18, 2010, at 10:33 PM, cd34 wrote:
> I've tried to pull out as much cruft and redesign to get the bare
> minimum model to make it easier to use the collection_class.
>
> What I'm trying to do:
>
> page.template.blocks[0].elements[0]
>
> as
>
> page.template['content'].elements[0]
so, attribute_mapped_collection on template.blocks mapping to block.name, then
association proxy on page.template jumping across template to blocks. You'd
have to rename "template" as a relationship to something else since the
association proxy would be taking that name.
>
> Right now, I get:
>
> page.template.blocks[0].name = 'content'
> page.template.blocks[1].name = 'menu'
>
> so my template needs to iterate through to figure out whether I need
> to walk page.template.blocks[0] or page.template.blocks[1] whereas I
> would rather do:
>
> for elements in template.blocks['content']:
>
> Thanks.
>
> controller/cms.py:
>
> def index(self, id='index'):
> tmpl_context.page =
> meta.Session.query(Page).filter_by(slug=id).one()
> return render(tmpl_context.page.template.name)
>
> model/cms.py:
>
> from sqlalchemy import *
> from sqlalchemy.orm import mapper, relation, backref
> from sqlalchemy import Table, ForeignKey, Column
> from sqlalchemy.types import Integer, Unicode
> from sqlalchemy.dialects import mysql
> from sqlalchemy.orm.collections import column_mapped_collection
>
> from pesi.model.meta import Base
>
> Template_block = Table('m_template_block', Base.metadata,
> Column('template_id', Integer, ForeignKey('m_template.id')),
> Column('block_id', Integer, ForeignKey('m_block.id'))
> )
>
> Block_element = Table('m_block_element', Base.metadata,
> Column('block_id', Integer, ForeignKey('m_block.id')),
> Column('element_id', Integer, ForeignKey('m_element.id'))
> )
>
> class Block(Base):
> __tablename__ = 'm_block'
>
> id = Column(mysql.BIGINT(20, unsigned=True), primary_key=True,
> autoincrement=True)
> name = Column(Unicode(80))
>
> elements = relation('Element', secondary=Block_element)
>
> def __repr__(self):
> return '<Block: id: %d name: %s>' % (self.id, self.name)
>
> class Element(Base):
> __tablename__ = 'm_element'
>
> id = Column(mysql.BIGINT(20, unsigned=True), primary_key=True,
> autoincrement=True)
> function = Column(Unicode(80))
>
> class Template(Base):
> __tablename__ = 'm_template'
>
> id = Column(mysql.BIGINT(20, unsigned=True), primary_key=True,
> autoincrement=True)
> name = Column(Unicode(80))
>
> blocks = relation(Block, secondary=Template_block)
>
> class Page(Base):
> __tablename__ = 'm_page'
>
> id = Column(mysql.BIGINT(20, unsigned=True), primary_key=True,
> autoincrement=True)
> template_id = Column(mysql.BIGINT(20, unsigned=True),
> ForeignKey(Template.id))
> slug = Column(Unicode(80))
>
> template = relation(Template, uselist=False)
>
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> 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 post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.