У меня есть ресторанный стол с полями, такими как kitchen_type и outlet_type, у которого kitchen_type есть таблица Kitchen (pk, kitchen_type), а у outlet_type есть таблица Outlet (pk, outlet_type).Есть больше полей, таких как is_vegeterian_friendly, доступность и так далее.Пользователь может выбрать любое поле для фильтрации, и я не хочу создавать комбинацию полей для обработки каждого запроса.Это безумие.
Пользователь может применить фильтр к любому полю в теле запроса POST, как показано ниже:
{
"outlet_type": 1,
"cuisine_type": 2,
...
}
Представление вернет список ресторанов после фильтра
class RestaurantList(APIView):
def post(self, request, format=None):
filter = dict(request.data)
retaurants = Restaurant.objects.filter(**filter)
serializer = RestaurantSerializer(retaurants, many=True)
return Response(serializer.data)
Однако, когда, например, в одном поле есть несколько вариантов выбора, они хотят отфильтровать несколько типов kitchen_type, таких как 1 и 2, тогда тело запроса должно добавить __in, чтобы оно работало.
{
"outlet_type": 1,
"cuisine_type__in": [1, 2],
...
}
Есть ли лучший способ сделать это?Я ожидаю, что нам не нужно изменять имя ключа, и мы просто создаем значение в виде массива, например:
{
"outlet_type": 1,
"cuisine_type": [1, 2],
...
}