Замена аргумента ключевого слова на переменную в фильтрации моделей Django
Я выполняю фильтрацию в модели django на основе данных, предоставленных пользователем в форме ввода. Я не хочу жестко кодировать значения, поэтому мне бы хотелось просмотреть все параметры запроса в цикле request.POST и затем отфильтровать по ключу и значению
Вот пример из моего кода
class QueryView(View):
def post(self, request, *args, **kwargs):
params = request.POST
if params:
for key in params:
queryset = MyModel.objects.filter(key=params[key])
return MyResponse
Я не могу заставить все работать, поскольку key должно быть полем в MyModel, есть ли лучший способ достижения той же цели.
Вы можете передать их в виде словаря:
queryset = MyModel.objects.filter(**{field_name: v1, another_field_name: v2})
вы можете получить доступ к полям и значениям POST как request.POST.items() он вернет пару ключ-значение, так что вы можете сделать что-то вроде этого
class QueryView(View):
def post(self, request, *args, **kwargs):
params = request.POST
if params:
for key, value in params.items():
# key is the field and value is it's value
# now you can filter as you wish
queryset = MyModel.objects.filter(key=value)
return MyResponse