Как опросить всех пользователей, которые делят хотя бы один колледж - PullRequest
0 голосов
/ 22 мая 2019

Я хочу запросить всех пользователей, у которых есть хотя бы один похожий атрибут / контент (в данном случае, колледж).

models.py



class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True,
    nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
    password = db.Column(db.String(60), nullable=False) 
    colleges = db.relationship('College', backref='author',
    lazy=True)

    def __repr__(self):
        return "{}, {}, {}".format(self.username, self.email,
        self.image_file)



class College(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    content = db.Column(db.Text, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), 
    nullable=False)

    def __repr__(self):
        return "{}".format(self.content)

в терминале для тестирования db

#after creating db
user_1 = User(username='name',
         email='example@demo.com',password='password')
db.session.add(user_1)
db.session.commit()
user = User.query.filter_by(username='name').first()
college_1 = College(content='College1', user_id=user.id)
college_2 = College(content="College2', user_id=user.id)
db.session.add(college_1)
db.session.add(college_2)
db.session.commit()


На данный момент я хочу запросить всех пользователей, которые содержат хотя бы один из колледжей (между колледжем_1 или колледжем_2).Поэтому я хочу вернуть идентификатор пользователя user_1 (и других, которые я добавляю), отправив запрос всем пользователям, которые содержат по крайней мере College_1 или College_2.

Я пробовал этот запрос:

User.query.filter_by(colleges="Dartmorth").all()

Но он возвращает «Невозможно сравнить коллекцию с объектом или коллекцией» sqlalchemy.exc.InvalidRequestError: Невозможно сравнить коллекциюк объекту или коллекции;используйте contains () для проверки членства. '

1 Ответ

0 голосов
/ 22 мая 2019

Вместо того, чтобы запрашивать модель User, вам нужно запросить College one:

colleges = College.query.filter_by(content="Dartmorth").all()

Он должен возвращать список экземпляров College, если он не пустой, вы можете выполнить итерациюэто и извлеките user_id:

user_0 = colleges[0].user_id
...