Doesn't quite work.

What I think is the problem is that when using secondary on the
association table, there are two foreign keys both referencing a
calendar. It doesn't know which to pick.

union mapper looks like this

union_calendar_mapper  = \
    mapper \
        (
        UnionCalendar,
        inherits=calendar_mapper,
        polymorphic_identity='union',
        properties =
            {
            'children':relationship(Calendar,
secondary='calendar_children_table')
            }
        )


On Mar 24, 4:29 pm, Michael Bayer <[email protected]> wrote:
> On Mar 24, 2011, at 4:40 AM, Nickle wrote:
>
>
>
>
>
>
>
>
>
> > I'm trying to implement a Composite 
> > Pattern,http://en.wikipedia.org/wiki/Composite_pattern
>
> > In this case its to represent some holiday calendars. I need to
> > implement a union calendar that is a collection of other calendars.
>
> > So a straightforward hierarchy. Calendar, abstract as the top level
> > class. SimpleCalendar that inherits from Calendar. Then a union
> > calendar that inherits from Calendar, but I need to implement
> > children, a collection of calendars.
>
> > So its a self referential hierarchy. The point to note is that one
> > calendar can appear in more than one union calendar, so its a self
> > referential many to many. Its certain I need an association table as a
> > result.
>
> > I'm not quite sure how to configure this.
>
> > I'm trying something along these lines
>
> > calendars_table = Table \
> >    (
> >    'calendars',
> >    metadata,
> >    Column ('id', Integer, primary_key=True),
> >    Column ('code', String, nullable=False, unique=True),
> >    Column ('name', String),
> >    Column ('calendar_type', String (20), nullable=False),
> >    Column ('monday', Boolean),
> >    Column ('tuesday', Boolean),
> >    Column ('wednesday', Boolean),
> >    Column ('thurday', Boolean),
> >    Column ('friday', Boolean),
> >    Column ('saturday', Boolean),
> >    Column ('sunday', Boolean)
> >    )
>
> > calendar_children_table = Table \
> >    (
> >    'calendar_children',
> >    metadata,
> >    Column ('parent_id', Integer, ForeignKey ('calendars.id')),
> >    Column ('child_id',  Integer, ForeignKey ('calendars.id'))
> >    )
>
> > calendar_mapper = mapper (Calendar, calendars_table,
> > polymorphic_on=calendars_table.c.calendar_type,
> > polymorphic_identity="calendar")
> > simple_calendar_mapper = mapper (SimpleCalendar,
> > inherits=calendar_mapper,
> > polymorphic_identity='simple',properties={'holidays':relationship(Holiday,
> > backref='calendar')})
> > union_calendar_mapper  = mapper (UnionCalendar,
> > inherits=calendar_mapper, polymorphic_identity='union')
>
> > holidays_table = Table \
> >    (
> >    'holidays',
> >    metadata,
> >    Column ('id',          Integer, primary_key=True),
> >    Column ('holiday_type',        String(20),  nullable=False),
> >    Column ('calendar_id', Integer, ForeignKey ('calendars.id')),
> >    Column ('description', String ),
> >    Column ('year',        Integer),
> >    Column ('month',       Integer),
> >    Column ('day',         Integer)
> >    )
>
> > holiday_mapper           = mapper (Holiday,          holidays_table,
> > polymorphic_on=holidays_table.c.holiday_type,
> > polymorphic_identity='holiday')
> > repeating_holiday_mapper = mapper (RepeatingHoliday,
> > inherits=holiday_mapper, polymorphic_identity='repeating')
> > simple_holiday_mapper    = mapper (SimpleHoliday,
> > inherits=holiday_mapper, polymorphic_identity='simple')
>
> > However, I'm not sure how to map the relationships with the
> > association table.
>
> > Points that I think are relevant are
>
> > 1. It's only the UnionCalendar that has children.
>
> apply a relatlonship() to the UnionCalendar mapping, the target class is 
> Calendar, "secondary" is calendar_children_table.
>
> > 2. Deleting a UnionCalendar should delete the entries in the
> > association table, but not the children calendars.
>
> This is a given when using "secondary" with relationship.   Severing the link 
> between parent and child corresponds to a deletion of the row in "secondary".
>
> > 3. Navigation is really only needed from the parent UnionCalendar to
> > the underlying children calendars. However, having a collection back
> > the other way might have some uses.
>
> just add "backref='parent_containers'" or similar to the relationship().
>
>
>
>
>
>
>
> > 4. For SimpleCalender to its Holidays, I haven't yet implemented the
> > cascaded delete, but I know how to do this.
>
> > Thanks
>
> > Nick
>
> > --
> > 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 
> > athttp://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.

Reply via email to