Python SQLalchemy Присоединиться к пользователю - PullRequest
0 голосов
/ 31 октября 2019

Обернуть голову вокруг способа получить список заданий, связанных с пользователем. Моя модель БД выглядит примерно так:

class Job(db.Model):
    id = db.Column(db.Integer, primary_key=True)

    # Relationship Rows
    actions = db.relationship('JobAction', backref='job')


class JobAction(db.Model):
    id = db.Column(db.Integer, primary_key=True)

    # Linked Rows
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))

    # Relationship Rows
    user = db.relationship('User', foreign_keys=[user_id], backref='jobactions')

Мне нужно получить список заданий, связанных с пользователем. Я могу использовать либо User, уже совпадающий с данными авторизованных пользователей. Или user.id.

Я смотрел на что-то вроде ниже, но не играли в кости. Я вижу, что это слишком оптимистичный запрос, но не вижу, что случилось. Потенциально пропущенное соединение.

# Get User first.
user = User.query.filter_by(id=1).first()

# Get their Jobs
jobs = Job.query.filter_by(actions.user=user).all()

Любые идеи будут с благодарностью. Cheers,

1 Ответ

0 голосов
/ 31 октября 2019

Полагаю, вам не хватает внешнего ключа. Если модель вашей базы данных выглядит так:

class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    jobactions = db.relationship("JobAction", back_populates="user")

class Job(db.Model):
    __tablename__ = 'jobs'
    id = db.Column(db.Integer, primary_key=True)
    jobactions = db.relationship('JobAction', backref='job')

class JobAction(db.Model):
    __tablename__ = 'jobactions'
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    job_id =  db.Column(db.Integer, db.ForeignKey('jobs.id'))
    user = db.relationship(User, back_populates="jobactions")
    job =  db.relationship(Job, back_populates="jobactions")

Тогда вы можете использовать:

jobs = [ jobaction.job for jobaction in user.jobactions ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...