Хранить поле телефона с помощью 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