Более чистый способ запроса динамического числа столбцов в Django? - PullRequest
0 голосов
/ 09 декабря 2008

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

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

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

Есть ли способ сжать это в один запрос фильтра?

Ответы [ 2 ]

9 голосов
/ 09 декабря 2008

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

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

Это описано в документации django и также SO .

3 голосов
/ 09 декабря 2008

Наборы запросов Django ленивы, поэтому то, что вы сейчас делаете, на самом деле довольно эффективно. Попадание в базу данных не произойдет, пока вы не попытаетесь получить доступ к одному из полей в QuerySet ... при условии, что вы не редактировали какой-то код, и это эффективно так:

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

Подробнее здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...