Понимание словаря с Q
Допустим, у меня есть следующий фрагмент кода:
criteria = {'description': 'tt', 'hostname': '2'}
filters = Q()
{filters.add(Q(**{k+'__icontains': v}), Q.AND) for k,v in criteria.items()}
Не могу понять, как избежать удвоения результата:
{<Q: (AND: ('description__icontains', 'tt'), ('hostname__icontains', '2'))>,
<Q: (AND: ('description__icontains', 'tt'), ('hostname__icontains', '2'))>}
Я понимаю, что мне нужно сменить
Q.AND
где-нибудь, не так ли?
1 ответ
Похоже, вы проверяете полученный
set
из набора понимания, в котором перечислены одни и те же
Q
объект (
filters
) дважды, после того как он был изменен. На самом деле это не проблема — вы нигде не используете полученный набор, но это выглядит немного удивительно.
В качестве альтернативы должна быть возможность пройти все
kwargs
ты хочешь
Q()
на одном дыхании:
criteria = {'description': 'tt', 'hostname': '2'}
filters = Q(**{k + '__icontains': v for k, v in criteria.items()})
Это устраняет необходимость в установленном понимании.