Может быть, не лучшее решение, но ... Этот код перезапускает загрузчик каждый раз, что плохо, но работает только вокруг, если вы хотите использовать загрузчик.
Loader l = getLoaderManager().getLoader(MY_LOADER);
if (l != null) {
getLoaderManager().restartLoader(MY_LOADER, null, this);
} else {
getLoaderManager().initLoader(MY_LOADER, null, this);
}
Кстати. Я использую Cursorloader ...
Вот мой пример сложного запроса, я надеюсь, что Вы находите это полезным
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)