Я использую колбу с SQLAlchemy, есть класс User с отношением многие-ко-многим к роли.Роль имеет свойство name, которое является enum (RoleType).
Когда я пытаюсь вставить нового пользователя с ролью пользователя по умолчанию:
with client.session() as session:
r = session.query(Role).filter(RoleType.USER.name == Role.name).first()
user.roles = [r]
session.add(user)
session.commit()
Я получаю следующее исключение:
'RoleType' object has no attribute 'translate'
Вот классы User, Role и RoleType:
from sqlalchemy import ForeignKey, Column, String, Integer, Boolean, Table
from sqlalchemy.orm import relationship, backref
user_role_association_table = Table('user_role', BaseRelation.metadata,
Column('user_id', Integer, ForeignKey('user.id')),
Column('role_name', Integer, ForeignKey('role.name')))
class User(BaseRelation):
id = Column(String, primary_key=True, nullable=False)
email = Column(String, nullable=False)
password = Column(String, nullable=False)
active = Column(Boolean, default=False, nullable=False)
roles = relationship(Role,
lazy='subquery',
secondary=user_role_association_table)
from enum import auto, Enum
class Role(BaseRelation):
name = Column(Enum(RoleType), primary_key=True)
def __init__(self, **kwargs):
name = kwargs.get("name", None)
if (name is not None) and isinstance(name, str):
kwargs["name"] = RoleType.get_type(name)
super(Role, self).__init__(**kwargs)
def __eq__(self, other):
if isinstance(other, dict):
return self.name == other.get('name', None)
return self.name == other.name
def __hash__(self):
return hash(self.name)
def __json__(self):
return ['name']
class RoleType(Enum):
USER = auto()
ADMIN = auto()