Мне нужно выполнить RAW-запрос в Django, и мне нужно санировать ввод.
Я создаю запрос, начиная с базовой строки:
qs_str = 'SELECT c.name, l.adds FROM company inner join lace ...WHERE..'
Затем на основании нескольких условий я изменил:
if x:
qs_str = ' '.join([qs_str, 'AND alpha=true '])
if self.request.GET.get('q'):
qs_str = ' '.join([qs_str, 'AND name=self.request.GET.get('q')])
if self.request.GET.get('ct'):
...
Затем я создаю Queryset:
qs = Company.objects.raw(qs_str)
Запрос изменяется на основе некоторых внутренних переменных и зависит от ввода пользователя. Конечно, пользовательский ввод, который мне нужно очистить.
Я знаю, что в Raw Queryset вы можете объявлять переменные,
name = %s'AND ads = %s, [lname, adds])
но поскольку они добавляются в конце, я должен выполнить проверку дважды:
- Первый раз, когда я создаю запрос
- Второй раз, чтобы узнать, какие переменные добавить после запроса
Это означает, что я делаю одни и те же чеки дважды, и у меня есть как минимум 5 чеков, поэтому, если возможно, избежать повторных проверок (если)