Фильтр запросов Django, объединяющий И и ИЛИ с объектами Q, не возвращает ожидаемых результатов

Может быть, не лучшее решение, но ... Этот код перезапускает загрузчик каждый раз, что плохо, но работает только вокруг, если вы хотите использовать загрузчик.

Loader l = getLoaderManager().getLoader(MY_LOADER);
if (l != null) {
    getLoaderManager().restartLoader(MY_LOADER, null, this);
} else {
    getLoaderManager().initLoader(MY_LOADER, null, this);
}

Кстати. Я использую Cursorloader ...

26
задан Tomasz Jakub Rup 9 December 2015 в 19:12
поделиться

1 ответ

Вот мой пример сложного запроса, я надеюсь, что Вы находите это полезным

or_condition = Q()
and_condition = Q(company=request.user.profile.company)

for field in MyModel._meta.get_fields():
    if field.name != 'created_on' and field.name != 'company':
        or_condition.add(
            Q(**{"{}__icontains".format(field.name): query}), Q.OR)

and_condition.add(or_condition2, Q.AND)
MyModel.objects.filter(and_condition)

, проблема с этим методом состоит в том, что Вы добираетесь empty (AND: ) случай в Вашем or_condition. Это не влияет на запрос вообще, но это раздражает меня! Мое текущее решение следующим образом

import operator
from functools import reduce

and_condition = Q(company=request.user.profile.company)
or_condition = reduce(operator.or_, (Q(**{"{}__icontains".format(field.name): query})
                                     for field in MyModel._meta.get_fields() if field.name != 'created_on' and field.name != 'company'))

and_condition.add(or_condition, Q.AND)
MyModel.objects.filter(and_condition)
0
ответ дан 28 November 2019 в 07:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: