bismigalis
Не должно работать
4kpt_III
Я наконец-таки понял, что Вы хотите сделать. Самый простой вариант - использовать фиксированный префикс, как я написал выше. Второй вариант значительно хардкорнее. Теперь я его не рекомендую.
4kpt_III
Ну да. Как я и думал. Этот класс находится вне маппера…
P.S. Самое, что интересное, что ответ на Ваш вопрос я написал уже во четвертом посте Воду в ступе толчем и толчем. Зато себя заняли хоть как-то
1. Называть все с одним префиксом и в @declared_attr формировать связь учитывая базовый префикс.
class OpsUser(SUser, Base): @declared_attr def users(self): fixed_prefix = self.__name__[:self.__name__.find("User")] return relationship(fixed_prefix + "Permissions") # class OpsPermissions(SPermissions, Base):
#CS - construction shemas class CS: __cs__ = {'SUsers': 'User'}
class SBlocks(IDB, PKID, CS): __tablename__ = 'blocks' @declared_attr def user_id(cls): return Column(Integer, ForeignKey('users.id')) @declared_attr def permission_id(cls): return Column(Integer, ForeignKey('permissions.id')) @declared_attr def fromuser_id(cls): return Column(Integer, ForeignKey('users.id')) datestart = Column(Integer) dateend = Column(Integer) blockcomment = Column(Unicode(255)) @declared_attr def users(cls): return relationship(cls.__cs__['SUsers'], uselist=False, primaryjoin="Users.id == %s.user_id" % cls.__name__) @declared_attr def permissions(cls): return relationship("Permissions", uselist=False) @declared_attr def fusers(cls): return relationship(cls.__cs__['SUsers'], uselist=False, primaryjoin="Users.id == %s.fromuser_id" % cls.__name__)
def cs(cs): from testproject.models.shemas import CS setattr(CS, "__cs__", cs)
@declared_attr def users(cls): return relationship(cls.__cs__['SUsers'], uselist=False, primaryjoin="Users.id == %s.user_id" % cls.__name__)
lightarhont
Возможно лучше использовать метакласс, поскольку он автоматически сможет получать имя функции, но что то мне подсказывает, что тут не всё так просто там…
@declared_attr def users(cls): primaryjoin = "%s.id == %s.user_id" % (cls.__cs__['SUsers'], cls.__name__) return relationship(cls.__cs__['SUsers'], uselist=False, primaryjoin=primaryjoin)