lifter icon indicating copy to clipboard operation
lifter copied to clipboard

How to query value in list?

Open n3storm opened this issue 8 years ago • 3 comments

I think reading the code that lifter supports value_in lists query. I cannot find any example or tip on how to implement this in my filter. Also startswith and other lookups would be nice to have them documented.

My data is a simple list of dictionaries, and list is a list.

Doesn't work: sent_messages = objects.filter(folder__in = sent_folders)

Doesn't work: sent_messages = objects.filter(Message.folder in sent_folders)

Combining Nodes section is not helpful either.

qn = (Message.date > this_year) & (Message.folder == 'INBOX.Sent') | (Message.folder == 'Sent') | (Message.folder == 'Enviados') | (Message.folder == 'INBOX.Enviados') sent_query = lifter.query.Query(action='select', filters=qn) sent_messages = objects.filter(sent_query)

Please help! :)

n3storm avatar Aug 19 '17 21:08 n3storm

Hello and sorry for my late answer, I was actually in a vacation trip :)

You can indeed use in, but with the myfield__value_in lookup:

objects.filter(eye_color__value_in=['brown'])

The fact is Python does not allows to override the __contains__ to return a non-boolean value. This is quite strange, considering you can do this for other lookups such as __eq__.

If you want to combine queries, you can also use the value_in operator object directly:

sent_folders = ['folder1', 'folder2']
query = Message.folder.test(lifter.lookups.value_in(sent_folders))

Also, as in is a registered keyword in python, for internal reasons, so that's why the lookup is named value_in instead of simply in.

The API is really not great here sorry :/

agateblue avatar Sep 04 '17 08:09 agateblue

Thank you!

I am thinking how to add this information improved with extra expressions like contains etc to the docs. Could you please keep this issue open meanwhile?

n3storm avatar Sep 07 '17 08:09 n3storm

Sure, that would be a great addition. Feel free to provide a PR whenever you have the time :)

agateblue avatar Sep 07 '17 08:09 agateblue