Как исправить исключение с помощью Q

#django #django-orm

#django #django-orm

Вопрос:

У меня есть простой запрос с фильтром и исключением. Исключение для Q amp; Q не работает.

Ниже приведен запрос, который я использую.

 start_date = (datetime(time.localtime().tm_year, time.localtime().tm_mon, 1) - timedelta(1)).replace(day=1)

data = models.Test.objects.filter(
            is_deleted=False).exclude(Q(status__in=[1,2,3]) amp; Q(modified_at__lt=start_date))
            .select_related('created_by')
            .prefetch_related('name')
  

Я хочу, чтобы исключение сработало. Если я использую exclude дважды, я получаю результат.

Ответ №1:

Из документа

exclude(**kwargs)
Возвращает новый набор запросов, содержащий объекты, которые не соответствуют заданным параметрам поиска. Параметры поиска (** kwargs) должны быть в формате, описанном в поиске полей ниже. Несколько параметров объединяются через AND в базовом операторе SQL, и все это заключено в NOT() .

Итак, просто используйте Q() объекты с разделением запятой,

 .exclude(Q(status__in=[1,2,3],Q(modified_at__lt=start_date))  

Комментарии:

1. Спасибо. Сработало отлично.