Reputation: 12870
The following SQLAlchemy code works, but looks un-pythonic:
if has_died: # has_died: True or False
query = query.filter(User.died_at != None)
else:
query = query.filter(User.died_at == None)
What is a more elegant way to add the filter?
Upvotes: 4
Views: 2322
Reputation: 542
What about:
query = query.filter(bool(User.died_at) == has_died)
It returns:
False
if User.died_at
is None
and has_died
is True
True
if User.died_at
is None
and has_died
is False
True
if User.died_at
is not None
and has_died
is True
False
if User.died_at
is not None
and has_died
is False
Which is the intended behavior...
But then again, not sure if it is easier to understand than your piece of code!
Upvotes: 0
Reputation: 9969
You could rewrite it as one line with a ternary operator
query = query.filter((User.died_at != None) if has_died else (User.died_at == None))
Upvotes: 3
Reputation: 12002
Well, you could do this:
query = query.filter((User.died_at != None) if has_died else (User.died_at == None))
But it's a bit hard to read. I think how you're doing it is fine.
Upvotes: 5