Django: ИЛИ с несколькими утверждениями - PullRequest
2 голосов
/ 24 февраля 2020

Я хочу получить объект, иногда с одним условием, а иногда с добавлением (ИЛИ) другого условия.

С Laravel (PHP) это легко сделать:

$q = MyModel::where('col1', $val1);
if ($userWantsToAddAnotherOrCondition) {
    $q = $q->orWhere('col2', $val2);
}

В конце у меня есть запрос с условием 'col1' = $va1 или 'col1' = $va1 OR 'col2' = $val2.

В Django (python), я знаю только так:

q = MyModel.objects.filter(Q(col1=val1) | Q(col2=val2))

Как добавить второе условие (col2=val2) с помощью другого оператора?

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Вы также можете использовать метод union () QuerySet.

q1 = MyModel.objects.filter(cond1)
q2 = MyModel.objects.filter(cond2)
q3 = MyModel.objects.filter(cond3)

q2.union(q1)
q3.union(q1)
1 голос
/ 24 февраля 2020

Вы можете просто связать Q объекты с помощью логического или оператора |. Например:

cond = Q(col1=val1)
if <i>some_condition</i>:
    <b>cond |=</b> Q(col2=val2)

q = MyModel.objects.filter(cond)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...