Хранить поле телефона с помощью django-phonenumber-field переопределять метод поиска в формате e164

я сохранил поле телефона в базу данных с помощью django-phonenumber-field с форматом e164, оно успешно сформировано и успешно.

вот мой model.py

class External(models.Model):
name = models.CharField(max_length=255, unique=True)
address = models.CharField(max_length=255)
type= models.ForeignKey(Type, on_delete=models.CASCADE, verbose_name="Type")
region= models.ForeignKey(Region, on_delete=models.CASCADE, verbose_name="Region")
email = models.EmailField(max_length=254, unique=True)
phone = PhoneNumberField(null=True, blank=True, unique=True)
status = models.BooleanField(default=True)
created_at = models.DateTimeField('date created', auto_now_add=True)
updated_at = models.DateTimeField('last edited', auto_now=True)

def __str__(self):
    return self.name

но проблема в том, что когда я выполняю поиск, используя национальный формат, например 0216333007, данные не найдены. может ли кто-нибудь помочь мне переопределить метод поиска, когда пользователь вводит 0216333007 в автоматическом формате e164 = +62216333007?

это мой admin.py

 exclude = ()
form = ExternalAdminForm
list_per_page = 10
readonly_fields = ('created_at', 'updated_at')
list_display = ('name', 'type_id_slug', 'short_address', 'region_id_slug', 'email_link', 'phone', 'status', 'created_at', 'updated_at')
list_filter = (StatusFilter, TypeFilter, RegionFilter,)
search_fields = ('name', 'address', 'email', 'phone',)

я использую django 4.1.5

спасибо всем, кто поможет мне. извините за мой плохой английский.

я нашел ответ

search_fields = ('name', 'address', 'email', 'phone',)

def get_search_results(self, request, queryset, search_term):
    queryset, use_distinct = super().get_search_results(request, queryset, search_term)
    try:
        search_term = PhoneNumber.from_string(search_term, None).as_e164
        queryset |= self.model.objects.filter(phone=search_term)
    except:
        pass
    return queryset, use_distinct
Вернуться на верх