I have the filter parameters that I get through GET request. These parameters are used for filtering QuerySet:
class FilterData(TypedDict):
title: str
min_price: int
max_price: int
freeDelivery: bool
available: bool
tags: list[int | None]
As you can see, the list of tags can be empty and this field shouldn’t be in the filter query.
So what’s the best way to change my filter query depending on incoming parameters?
if
might help, but I’m not sure it’s a good solution:
if not tags:
result = Product.objects.filter(
Q(
price__gte=filter_data["min_price"],
price__lte=filter_data["max_price"],
)
& Q(freeDelivery=filter_data["freeDelivery"])
& Q(available=filter_data["available"])
& Q(title__icontains=filter_data["title"]))
).order_by(order_field)
else:
result = Product.objects.filter(
Q(
price__gte=filter_data["min_price"],
price__lte=filter_data["max_price"],
)
& Q(freeDelivery=filter_data["freeDelivery"])
& Q(available=filter_data["available"])
& Q(title__icontains=filter_data["title"])
& Q(tags__contains=[1, 2, 3])
).order_by(order_field)
Thx.