Да, вы можете аннотировать объекты модели по одной из сторон, а затем фильтровать по другой стороне:
from django.db.models.functions import Lower
QuerySet.objets.annotate(
<b>field1_lower=Lower('field1')</b>
).filter(
<b>field1_lower=Lower('field2')</b>
)
Для сопоставления без учета регистра следует использовать __iexact
lookup [Django -doc] :
from django.db.models import F
QuerySet.objets.filter(
<b>field1__iexact=F('field2')</b>
)
Обратите внимание, что сопоставление без учета регистра не то же, что вызов Lower
on два операнда, а затем проверьте, совпадают ли два. Действительно, сопоставление определяет определенные c правила для обработки специальных символов. Например, на немецком языке ß не имеет строчной версии. Есть специальные правила, как их сравнивать.