SQLAlchemy - правильный путь для моделей / методов в большем количестве файлов - PullRequest
0 голосов
/ 03 июня 2018

В моем проекте, основанном на 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()

Примечание: Роль модели находится во втором файле.

И мне нужно использовать правильный и понятный способ для пользовательских методов в файлах большего количества моделей.

Спасибо за любые ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...