Пользовательское поле поиска Django вызывает ошибку EmptyResultSet при передаче пустого набора

Я пытался реализовать поле поиска not_in, но оно генерирует запрос, отличный от ~Q. При запросе по списку идентификаторов, таких как: ids = [1, 2, 3, 4] оба моих варианта not_in и ~Q дают одинаковый набор запросов, хотя их сгенерированный SQL отличается. Проблема, которую я обнаружил в своей реализации, заключается в том, что, например, запрос к пустому списку empty_list ~Q(id__in=empty_list) вернет все строки, чьи идентификаторы не находятся в empty_list, в данном случае все строки. Но в моей реализации возвращается пустой набор запросов

Код вышеуказанной реализации для справки

from django.db.models.lookups import In as LookupIn

@Field.register_lookup
class LookupNotIn(LookupIn):
    """
    Acts as opposite to `__in`
    """
    lookup_name = "not_in"

    def as_sql(self, compiler, connection):
        lhs, params = self.process_lhs(compiler, connection)
        rhs, rhs_params = self.process_rhs(compiler, connection)
        params.extend(rhs_params)

        return "%s NOT IN %s" % (lhs, rhs), params

Он генерирует другой SQL для ~Q:

In [28]: print(ShopItem.objects.filter(~Q(id__in=deleted_ids)).query)
SELECT "shop_shopitem"."id", "shop_shopitem"."bakery_id", "shop_shopitem"."name", "shop_shopitem"."is_deleted", "shop_shopitem"."is_visible", "shop_shopitem"."number", "shop_shopitem"."description", "shop_shopitem"."special_information" FROM "shop_shopitem" WHERE NOT ("shop_shopitem"."id" IN (5c6a4164-252a-4aa5-abc1-62cebbc3119a, 6dcbc509-435e-4ccc-a6fd-6a48c652278f, f647ceac-34dd-4e1a-8fcd-ebb255b7d6f9, a1be4bc9-0a10-447f-8215-94df18c53fe2)) ORDER BY "shop_shopitem"."name" ASC
In [29]: print(ShopItem.objects.filter(id__not_in=deleted_ids).query)
SELECT "shop_shopitem"."id", "shop_shopitem"."bakery_id", "shop_shopitem"."name", "shop_shopitem"."is_deleted", "shop_shopitem"."is_visible", "shop_shopitem"."number", "shop_shopitem"."description", "shop_shopitem"."special_information" FROM "shop_shopitem" WHERE "shop_shopitem"."id" NOT IN (5c6a4164-252a-4aa5-abc1-62cebbc3119a, 6dcbc509-435e-4ccc-a6fd-6a48c652278f, f647ceac-34dd-4e1a-8fcd-ebb255b7d6f9, a1be4bc9-0a10-447f-8215-94df18c53fe2) ORDER BY "shop_shopitem"."name" ASC

Моя вторая реализация, которая фактически генерирует тот же SQL, что и ~Q:

@Field.register_lookup
class LookupNotIn(LookupIn):
    """
    Acts as opposite to `__in`
    """
    lookup_name = "not_in"

    def as_sql(self, compiler, connection):
        lhs, params = self.process_lhs(compiler, connection)
        rhs, rhs_params = self.process_rhs(compiler, connection)
        params.extend(rhs_params)
        return "NOT (%s IN %s)" % (lhs, rhs), params

Но при передаче пустого набора/списка в следующем виде:

print(ShopItem.objects.filter(id__not_in=[]).query) возникает ошибка:

/usr/local/lib/python3.8/site-packages/django/db/models/sql/where.py in as_sql(self, compiler, connection)
     97                     return '', []
     98                 else:
---> 99                     raise EmptyResultSet
    100             if full_needed == 0:
    101                 if self.negated:

EmptyResultSet: 

Есть ли какой-нибудь обходной путь?

Вернуться на верх