Избегайте циклического импорта в Flask / SQLAlchemy при обращении к связанной модели - PullRequest
0 голосов
/ 04 мая 2019

Я использую Flask-SQLAlchemy с чертежами, в установке, основанной на cookiecutter-flask , которая решает большинство круговых проблем импорта.

Однако моя ситуация следующая. У меня есть две связанные ( на самом деле, вероятно, не имеет значения, есть ли между ними связь с базой данных или нет ) моделей / таблиц, которые объявлены в разных модулях Python. Я хотел бы расширить обе модели с помощью пользовательских методов, которые запрашивают другую модель. Минимальный пример:

# employee/models.py
class Employee(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))
    company_id = db.Column(db.ForeignKey('company.id'))
    company = db.relationship("Company", backref="employees") # Referencing "Company" as str avoids circular import

    def job_opportunities(self):
        # Complicated query based on this employee's data
        return Company.query.filter(...).all()

и

# company/models.py
class Company(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))

    def potential_new_employees(self):
        # Complicated query bsaed on this company's data
        return Employee.query.filter(...).all()

В обоих файлах есть метод, который должен импортировать модель, определенную в другом модуле. Я хотел бы оставить обе модели разделенными на разные модули. Что такое чистый шаблон для решения этой проблемы?

...