Next design problem for me is version table. I have Document model with DocumentVersion model, but i dont know how to:
- get the latest version of document - set creator and updator, automatic behavior for this - update version number - fetch thru Document(s) and DocumentVersion(s) Lets see the code sample i have prepared (raw sketch): ################################################################## # Tables ################################################################## users_table = Table("users", metadata, Column("id", Integer, primary_key=True), ) languages_table = Table("languages", metadata, Column("id", Integer, primary_key=True), Column("alpha2", String(2)), Column("name", Unicode(100)), ) documents_table = Table("documents", metadata, Column("id", Integer, primary_key=True), # how to get latest version # Column("latest_version", Integer, ForeignKey('document_versions.version'), default=1), Column("created", DateTime, default=datetime.now), # how to set creator and updator? Column("creator", Integer, ForeignKey('users.id'), default=uid_users_id), ) document_versions_table = Table("document_versions", metadata, Column("id", Integer, primary_key=True), Column("document_id", Integer, ForeignKey('documents.id')), Column("language_id", Integer, ForeignKey('language.id')), Column("name", Unicode(64)), Column("content", Unicode), # how to update DocumentVersion.version ??? Column("version", Integer, default=1, onupdate=DocumentVersion.version+1), Column("updated", DateTime, default=datetime.now, onupdate=datetime.now), # how to set creator and updator? Column("updator", Integer, ForeignKey('users.id'), onupdate=uid_users_id), ) ################################################################## # Models ################################################################## class BaseObject(object): def __init__(self): self._repr_ = [] def __repr__(self): from string import join str = ', '.join("'%s'" % (self.__dict__[v]) for v in self._repr_) return "<%s(%s)>" % (self.__class__, str) class NameObject(BaseObject): def __init__(self, name): BaseObject.__init__(self) self.name = name def __repr__(self): self._repr_ = ["name"] return BaseObject.__repr__(self) class User(BaseObject): def __init__(self): BaseObject.__init__(self) class Language(NameObject): def __init__(self, alpha2, name): NameObject.__init__(self, name) self.alpha2 = alpha2 def __repr__(self): self._repr_ = ["alpha2", "name"] return BaseObject.__repr__(self) class Document(BaseObject): def __init__(self): BaseObject.__init__(self) def __repr__(self): self._repr_ = ["created", "creator"] return BaseObject.__repr__(self) class DocumentVersion(NameObject): def __init__(self, name, content = "", language = Null): NameObject.__init__(self, name) self.document = Document() self.content = content self.language = language def __repr__(self): self._repr_ = ["name", "document", "version"] return BaseObject.__repr__(self) class UserDocument(object): pass class OrganisationDocument(object): pass ################################################################## # Mappers ################################################################## mapper(User, users_table) mapper(Document, documents_table, properties={ 'user':relation(User, backref="documentversions"), } ) mapper(DocumentVersion, document_versions_table, properties={ 'document':relation(Document, backref="documentversions"), 'language':relation(Language, backref="documentversions"), 'user':relation(User, backref="documentversions"), } ) mapper(Language, languages_table) """ mapper(UserDocument, user_documents, properties={ 'document':relation(DocumentVersion, backref="users"), } ) mapper(OrganisationDocument, organisation_documents, properties={ 'document':relation(DocumentVersion, backref="organisations"), } ) """ ################################################################## # Fixtures ################################################################## language_fi = Language('fi', 'Finnish') language_en = Language('en', 'English') dv = DocumentVersion("My first document", "some content...", language_en) db_sess.save(dv) # accidental english dv = DocumentVersion("Toinen dokumentti", "hiukan tavaraa...", language_en) db_sess.save(dv) ################################################################## # Tests and examples ################################################################## dv = db_sess.query(DocumentVersion).filter_by(name="Toinen dokumentti").first() dv.language = language_fi dv.save() print dv # should have version 2 # how to fetch thru Document(s) and their DocumentVersion(s) # how to set up UserDocument(s) --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---