On Oct 1, 2008, at 6:42 AM, Adam Dziendziel wrote:

>
> I have a ContentObject class mapped using:
>
> co_mapper = orm.mapper(ContentObject,
>   content_objects_table,
>   extension=COMapperExtension(),
>   polymorphic_on=content_objects_table.c.type,
>   polymorphic_identity='ContentObject',
>   properties={
>    'theme': orm.relation(Theme),
>    'resources': orm.relation(Resource,
>                              secondary=co_resources_table),
>    'children': orm.relation(ContentObject,
>        secondary=co_children_table,
>
> primaryjoin=content_objects_table.c.id==co_children_table.c.parent_id,
>
> secondaryjoin
> =co_children_table.c.child_id==content_objects_table.c.id,
>        backref='parents'),
>    'translations': orm.relation(ContentObjectTranslation,
> backref='co')
>   }
> )
>
> co = ContentObject()
> co.children.append(Session.query(ContentObject).get(1))
> # assert co not in Session # fails!
> co.theme = Session.query(Theme).get(1) # Session flushes automatically
> when retrieving a theme, and I get an error because the  theme_id
> column (with nullable=False) is not set yet
>
> IntegrityError: (IntegrityError) content_objects.theme_id may not be
> NULL u'INSERT INTO content_objects (type, parent_id, position,
> theme_id, data, keywords) VALUES (?, ?, ?, ?, ?, ?)' ['group', None,
> None, None, None, '']
>
> If I remove backref='parents' it works as expected. Do I have to turn
> auto-flush off to avoid incidental flushes?

If you're on 0.5, you can in fact disable "save-update" cascade on the  
backref, and it should work as planned, using  
backref=backref('parent', cascade=None).

Though lately I've just been using a @disable_autoflush decorator for  
this situation, in a web app typically there's one controller method  
that does the "populate" operation so that works out OK.





--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
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