Упрощенный пример:
В приложении-опросе Django я хотел список выбора HTML, показывающий зарегистрированных пользователей. Но поскольку у нас 5000 зарегистрированных пользователей, мне нужен был способ отфильтровать этот список по критериям запроса (например, просто люди, которые прошли определенный семинар). Чтобы элемент опроса можно было повторно использовать, мне нужно, чтобы человек, создающий вопрос опроса, мог прикрепить эти критерии к этому вопросу (не хочу жестко кодировать запрос в приложении).
Решение, которое я придумал, не на 100% удобное для пользователя (для его создания требуется помощь технического специалиста), но оно действительно решает проблему. При создании вопроса редактор может ввести словарь в настраиваемое поле, например ::
{'is_staff':True,'last_name__startswith':'A',}
Эта строка хранится в базе данных. В коде представления он возвращается как self.question.custom_query
. Значение этого - строка, которая выглядит как словарь. Мы превращаем его обратно в настоящий словарь с помощью eval () и затем помещаем его в набор запросов с помощью ** kwargs:
kwargs = eval(self.question.custom_query)
user_list = User.objects.filter(**kwargs).order_by("last_name")