Уборщик способ запроса на динамическое число столбцов в Django?

голоса
0

В моем случае, у меня есть ряд имен столбцов, поступающие из формы. Я хочу, чтобы фильтр, чтобы убедиться, что они все верно. Вот как я в настоящее время сделать это:

for op in self.cleaned_data['options']:
    cars = cars.filter((op, True))

Теперь она работает , но есть является возможным ~ 40 столбцов , которые будут проверены , и поэтому не представляется очень эффективными , чтобы держать обработку запросов.

Есть ли способ, что я могу конденсироваться это в одном запросе фильтра?

Задан 09/12/2008 в 18:00
источник пользователем
На других языках...                            


2 ответов

голоса
9

Построить запрос в качестве словаря и используйте оператор ** распаковывать параметры в качестве аргументов ключевых слов к методу фильтра.

op_kwargs = {}
for op in self.cleaned_data['options']:
    op_kwargs[op] = True
cars = CarModel.objects.filter(**op_kwargs)

Это описано в документации Джанго и было покрыто на SO , а также.

Ответил 09/12/2008 в 18:37
источник пользователем

голоса
3

Наборы запросов Джанго ленивы, так что вы сейчас делаете на самом деле довольно эффективным. База данных не будет хит, пока вы пытаетесь получить доступ к одному из полей в QuerySet ... предполагая, что есть, что вы не отредактировать код, и это эффективно, как это:

cars = CarModel.objects.all()
for op in self.cleaned_data['options']:
    cars = cars.filter((op, True))

Более подробная информация здесь .

Ответил 09/12/2008 в 21:57
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more