Как построить сложный запрос 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)

или аналогичные условия на значениях ваших фильтров.

Вернуться на верх