Django filter queryset для замены символов
У меня есть таблица клиентов с замаскированными номерами телефонов (944 (543) 3556), хранящимися в ней. (поле: телефон).
Я хочу отфильтровать/поискать таблицу по номеру телефона без специальных символов. Я попробовал следующие запросы фильтрации, но они не возвращают ожидаемых результатов.
self.queryset = self.queryset.annotate(customer_phone=Value(re.sub('[^0-9]','','123@#'),output_field=models.CharField()))
print ('customer_phone:', self.queryset[0].customer_phone)
# Output: customer_phone: 123 [Expected result]
Но когда я задаю имя поля, оно выдает следующую ошибку.
self.queryset = self.queryset.annotate(customer_phone=Value(re.sub('[^0-9]','',F('phone')),output_field=models.CharField()))
print ('customer_phone:', self.queryset[0].customer_phone)
File "/usr/local/lib/python3.6/re.py", line 191, in sub
backend_1 | return _compile(pattern, flags).sub(repl, string, count)
backend_1 | TypeError: expected string or bytes-like object
Есть ли возможность фильтровать номер телефона, не учитывая специальные символы в нем?
Версия Python: Python 3.6.5 Django==2.0.1
Попробуйте этот запрос:
from django.db.models import Func
self.queryset.objects.annotate(customer_phone=Func(F('phone'), Value('[^0-9]'), Value(''), Value('g'), function='REGEXP_REPLACE', output_field=models.CharField()))