На данный момент (30-11-2018 04:13 (UTC)
) это невозможно.
Почему это невозможно?
Если мы посмотрим на исходный код , они использовали метод filter()
для получения результатов.
def ls(modelname, *args, **kwargs):
"""Search models
kwargs are passed to filter.
It shows all fields by default, you can restrict them with args.
Show username and email for superusers::
djcli auth.user is_superuser=1 username email
"""
model = _model_get(modelname)
models = model.objects<b>.filter(**kwargs) # here the majot thing happens</b>
if not models:
print('No result found !')
sys.exit(0)
_printqs(models, args)
Итак, если вы выполните такую команду,
djcli ls settings.AUTH_USER_MODEL is_superuser=True is_staff=1 username email is_superuser
он передаст is_superuser=True is_staff=1
в фильтр как kwargs
, что приведет к фильтрации LOGICAL AND .
Как сделать OR
фильтр в Django?
Это можно сделать с помощью оператора Q()
и |
Пример:
MyModel.model.objects.filter(Q(question__startswith='Who') | Q(question__startswith='What'))
Что теперь ??
Solution-1. Как упомянуто @ schillingt , поднять билет или PR для их репо, чтобы решить проблему
Solution-2. Редактирование исходного кода
создайте новую функцию, ls_OR()
as,
<b>from django.db.models import Q</b>
def ls_OR(modelname, *args, **kwargs):
"""Search models
kwargs are passed to filter in LOGICAL OR fashion.
It shows all fields by default, you can restrict them with args.
Show username and email for superusers::
djcli auth.user is_superuser=1 username email
"""
model = _model_get(modelname)
<b>or_filter = Q()
for key, value in kwargs.items():
or_filter |= Q(**{key: value})
models = model.objects.filter(or_filter)</b>
if not models:
print('No result found !')
sys.exit(0)
_printqs(models, args)
и теперь попробуйте с новой командой ls_OR
как
djcli <b>ls_OR</b> settings.AUTH_USER_MODEL is_superuser=True is_staff=1 username email is_superuser
Solution-3. Создание копии оригинальной версии пакета
Я не уверен насчет Лицензии или продуктов Leagel.
Step-1 : клонировать репозиторий
Шаг-2 : отредактируйте файл djcli.py
, добавив функцию ls_OR
, о которой я упоминал в разделе Solution-2
Шаг-3 : удалите старую версию djcli
из вашей среды с помощью pip uninstall djcli
Шаг-4 : установите наш djcli
python setup.py install
Шаг-5 : начать использовать команду ls_OR
:)
Заключение
Я бы порекомендовал Solution-1
. Если вы спешите, перейдите на Solution-3
.