I'm trying to do a django query, but with the possibility of several different WHERE
parameters. So I was thinking of doing something like:
querystring = "subcat__id__in=[1,3,5]" Listing.objects.filter(querystring)
Here Listing is defined in my model, and it contains the Many-To-Many field subcat
. However, that raises a ValueError
because filter doesn't accept a string as its argument. Is there a way in Python to have a string evaluated as just its contents rather than as a string? Something like a print statement that prints the value of the string inline rather than to the standard output.
By the way, the reason I don't just do
querystring = [1,3,5] Listing.objects.filter(subcat__id__in=querystring)
is that I'm not always filtering for subcat__id
, sometimes it's one or several other parameters, and I'd rather not have to write out a bunch of separate queries controlled by if statements. Any advice is much appreciated.
The sql query will be like SELECT * FROM mytable WHERE ids=[1, 3, 6, 7, 9] which is not true. You have to use in operator for this so you query will be like SELECT * FROM mytable WHERE ids in (1, 3, 6, 7, 9) for that Django provide __in operator.
filter(name=x or name= y) but this answer will give first = allobjects. filter(name=x) then filter first. filter(name=y). Hope you guys get it.
The filter() method is used to filter you search, and allows you to return only the rows that matches the search term.
Perhaps...
filter_dict = {'subcat__id__in': [1,3,5]} Listing.objects.filter(**filter_dict)
Listing.objects.filter(**{"subcat__id__in": ast.literal_eval("[1,3,5]")})
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