-
Q в QuerySet запросах является отличным инструментом, но возникла задача подставлять поля.
Например, идёт фильтрация по нескольким полям.
На входе имеем имена полей и строки поиска:
Хочется сделать запросf_dict = {'name': 'name_search_text', 'note': 'note_search_text'}
но автоматически:Q(name__icontains='name_search_text') AND Q(note__icontains='note_search_text')
Можно конечно if'ами, но некрасиво ужасно.query = Q()
for f in f_dict:
query = query AND Q( f = f_dict[f] ) # так конечно нельзя, здесь ошибка
Как поступить в такой ситуации? Сталкивался ли кто-нибудь? -
Насколько я понял, вам просто нужно разобраться с формой записи аргументов
*args, **kwargs.Например:
Q(**{'%s__icontains' % field: value}) -
f_dict = {'name': 'name_search_text', 'note': 'note_search_text'}
predicate = 'icontains'
query_dict = dict([('%s__%s' % (field, predicate), value)
for field, value in f_dict.items()])
some_query_set.filter(**query_dict) -
Владимир, admin, большое спасибо!
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

