Как построить сложный запрос Django, в котором иногда условия являются ВСЕМИ
Допустим, у меня есть три поля выбора, и я знаю их значения в моем представлении. Например:
fpriority = filtform["priority"].value()
fstatus = filtform["status"].value()
fassigned = filtform["assigned"].value()
Значениями каждого из них будет целое число (например, 1-3), относящееся к соответствующему столбцу в таблице. Итак, мои первые мысли по поводу Query таковы:
tasks = Task.objects.filter(Q(priority=fpriority) & Q(
status=fstatus) & Q(assigned_to=fassigned))
Однако проблема заключается в том, что мне также нужен выбор для всех. Поэтому, допустим, я включу ноль (0) в каждое поле выбора, чтобы обозначить ВСЕ
Теперь каждое из приведенных выше условий Q должно включать возможность того, что переменная равна 0 и, следовательно, означает ВСЕ для этой части условия.
Есть мысли по поводу чистого способа сделать это?
Вы хотите получить что-то вроде этого:
q = Q() # or initialize with filter conditions that should apply in any case
if not (fpriority == 0 and fstatus == 0 and fassigned == 0):
q = q & Q(priority=fpriority) & Q(status=fstatus) & Q(assigned_to=fassigned)
tasks = Task.objects.filter(q)
или аналогичные условия на значениях ваших фильтров.