[Django]-Using a string as the argument to a Django filter query

80👍

✅

Perhaps…

filter_dict = {'subcat__id__in': [1,3,5]}
Listing.objects.filter(**filter_dict)

9👍

Listing.objects.filter(**{"subcat__id__in": ast.literal_eval("[1,3,5]")})

1👍

You can do an OR query like this:

from functools import reduce
from operator import or_

query_as_dict = {"subcat__id__in": [1,3,5], "cat__id": 9}
query = reduce(or_, (Q(**{key: value}) for key, value in query_as_dict.items()))
Listing.objects.filter(query)

Leave a comment