В моем проекте, основанном на Flask + SQLAlchemy, у меня есть больше файлов для большего количества моделей.
Например:
# file: models_users.py
user_roles_association = db.Table('user_roles_association',
Column('role_id',
db.Integer,
db.ForeignKey('roles.id')),
Column('user_id',
db.Integer,
db.ForeignKey('users.id'))
)
class User(UserMixin, Model):
__tablename__ = 'users'
id = Column(db.Integer, primary_key=True)
first_name = Column(db.String(40), nullable=True)
last_name = Column(db.String(40), nullable=True)
roles = db.relationship('Role',
secondary=user_roles_association,
backref=db.backref('users', lazy='dynamic'),
lazy='dynamic')
def __init__(self, first_name, last_name, **kwargs):
db.Model.__init__(self,
first_name=first_name,
last_name=last_name,
**kwargs)
def my_roles(user_id):
user = User.query.get(user_id)
return user.roles.order_by(Role.id).all()
Второй файл:
# file: models_cofig.py
class Role(UserMixin, Model):
__tablename__ = 'roles'
id = Column(db.Integer, primary_key=True)
name = Column(db.String(40), unique=True, nullable=False)
def __init__(self, name, **kwargs):
"""Create instance."""
db.Model.__init__(self,
name=name,
**kwargs)
def __repr__(self):
return str(self.name)
Хорошо, и вопрос: Как правильно создать метод, где я могу использовать модели из других файлов моделей?
Грязный способ:
# file models_user.py
from apps.config import Role
class User(UserMixin, Model):
__tablename__ = 'users'
...
...
def my_roles(user_id):
user = User.query.get(user_id)
return user.roles.order_by(Role.id).all()
Примечание: Роль модели находится во втором файле.
И мне нужно использовать правильный и понятный способ для пользовательских методов в файлах большего количества моделей.
Спасибо за любые ответы.