проблему решил:
Код | from datetime import datetime
from sqlobject import *
from turbogears import identity from turbogears.database import PackageHub
hub = PackageHub("pr1") __connection__ = hub
# class YourDataClass(SQLObject): # pass
class VisitIdentity(SQLObject): visit_key = StringCol( length=40, alternateID=True, alternateMethodName="by_visit_key" ) user_id = IntCol()
class Group(SQLObject): """ An ultra-simple group definition. """ # names like "Group", "Order" and "User" are reserved words in SQL # so we set the name to something safe for SQL class sqlmeta: table="tg_group" group_name = UnicodeCol( length=16, alternateID=True, alternateMethodName="by_group_name" ) display_name = UnicodeCol( length=255 ) created = DateTimeCol( default=datetime.now )
# collection of all users belonging to this group users = RelatedJoin( "User", intermediateTable="user_group", joinColumn="group_id", otherColumn="user_id" )
# collection of all permissions for this group permissions = RelatedJoin( "Permission", joinColumn="group_id", intermediateTable="group_permission", otherColumn="permission_id" )
class User(SQLObject): """ Reasonably basic User definition. Probably would want additional attributes. """ # names like "Group", "Order" and "User" are reserved words in SQL # so we set the name to something safe for SQL class sqlmeta: table="tg_user"
user_name = UnicodeCol( length=16, alternateID=True, alternateMethodName="by_user_name" ) email_address = UnicodeCol( length=255, alternateID=True, alternateMethodName="by_email_address" ) display_name = UnicodeCol( length=255 ) password = UnicodeCol( length=40 ) created = DateTimeCol( default=datetime.now )
# groups this user belongs to groups = RelatedJoin( "Group", intermediateTable="user_group", joinColumn="user_id", otherColumn="group_id" ) available_docs = RelatedJoin("Doc1", intermediateTable="readers_users_docs", addRemoveName="av_Doc") MyDocs = RelatedJoin("Doc1", intermediateTable="writers_users_docs", addRemoveName="My_Doc")
def _get_permissions( self ): perms = set() for g in self.groups: perms = perms | set(g.permissions) return perms def _set_password( self, cleartext_password ): "Runs cleartext_password through the hash algorithm before saving." hash = identity.encrypt_password(cleartext_password) self._SO_set_password(hash) def set_password_raw( self, password ): "Saves the password as-is to the database." self._SO_set_password(password)
class Permission(SQLObject): permission_name = UnicodeCol( length=16, alternateID=True, alternateMethodName="by_permission_name" ) description = UnicodeCol( length=255 ) groups = RelatedJoin( "Group", intermediateTable="group_permission", joinColumn="permission_id", otherColumn="group_id" )
class Doc1(SQLObject): name = UnicodeCol() ## description = UnicodeCol() ## writers = RelatedJoin("User", intermediateTable='writers_users_docs', addRemoveName="writer") readers = RelatedJoin("User", intermediateTable='readers_users_docs', addRemoveName="reader")
|
использую addRemoveName из http://sqlobject.org/SQLObject.html#relatedjoin-and-sqlrelatedjoin-many-to-many |