I have User
which has-one
Person
. So User.person
is a Person
.
I am trying to get a list of User
from a list of Person
.
I tried the following:
>>> people = Person.query.filter().limit(3)
<flask_sqlalchemy.BaseQuery object at 0x111c69bd0>
>>> User.query.filter(User.person.in_(people)).all()
NotImplementedError: in_() not yet supported for relationships. For a simple many-to-one, use in_() against the set of foreign key values.
What is the best way to get a list of User
s where User.person
is in that list of people
?
As the error message helpfully tells you, you need to use in_
against the foreign keys instead:
User.query.join(User.person).filter(Person.id.in_(p.id for p in people)).all()
Since you're going to query for both anyway, might be better to do a joined load and then get the people using Python:
people = Person.query.join(Person.user).options(db.contains_eager(Person.user)).limit(3).all()
users = [p.user for p in people]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With