Hello, I'm curious about the behaviour of foreign keys when modifying collections as I want to be able to get the value before flush for some business logic validation.
The following is a cut down version of the association list example: import uuid from sqlalchemy import Column, ForeignKey, Integer, String, create_engine from sqlalchemy.orm import Session, relationship, backref from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class TreeNode(Base): __tablename__ = 'tree' id = Column(String(36), primary_key=True) parent_id = Column(Integer, ForeignKey(id)) children = relationship( 'TreeNode', backref=backref('parent', remote_side=id) ) def __init__(self, id=None, *args, **kwargs): if id is None: id = str(uuid.uuid4()) self.id = id super(TreeNode, self).__init__(*args, **kwargs) if __name__ == '__main__': engine = create_engine('sqlite://') Base.metadata.create_all(engine) session = Session(engine) node = TreeNode() session.add(node) print node.id # some uuid child_node = TreeNode() node.children.append(child_node) # Question: Why is parent_id not set to node.id even though it was available? print child_node.parent_id Note that the child_node.parent_id is None even though the referenced value was present in the session. I know a flush will fix this, but I want to check this value is not None for certain 'types' of node before flush if possible. Is there a way to configure that behaviour or should I be creating my own collection listeners to handle this? cheers, Martin -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.