You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中django-phonenumber-field搜索:需将本国号码转E164格式

解决Django Admin中本国格式电话号码搜索E164存储数据的问题

你已经通过django-phonenumber-field成功将电话号码以E164格式存入数据库,但在Admin后台使用本国格式(如0216333007)搜索时无法匹配对应数据。可以通过重写ModelAdmin的get_search_results方法,自动将用户输入的本国号码转换为E164格式后再执行搜索。

修改步骤:

  1. 导入PhoneNumber和PhoneNumberParseException模块,用于号码解析与格式转换
  2. 在ExternalAdmin类中重写get_search_results方法,处理搜索关键词里的电话号码

修改后的admin.py代码示例:

from django.contrib import admin
from phonenumber_field.phonenumber import PhoneNumber, PhoneNumberParseException
from .models import External

# 假设你已定义StatusFilter、TypeFilter、RegionFilter这些自定义过滤器
class ExternalAdmin(admin.ModelAdmin):
    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',)

    def get_search_results(self, request, queryset, search_term):
        queryset, use_distinct = super().get_search_results(request, queryset, search_term)
        # 尝试解析搜索词为本国号码并转为E164格式,这里以印尼(地区码ID)为例,按需修改
        try:
            phone_number = PhoneNumber.from_string(search_term, region='ID')
            e164_number = phone_number.as_e164
            # 添加E164格式号码的搜索条件
            queryset |= self.model.objects.filter(phone=e164_number)
        except PhoneNumberParseException:
            # 若输入不是有效号码,跳过转换,保留原有搜索逻辑
            pass
        return queryset, use_distinct

admin.site.register(External, ExternalAdmin)

代码说明:

  • PhoneNumber.from_string(search_term, region='ID'):指定对应国家/地区的代码,将用户输入的本国格式号码解析为标准PhoneNumber对象
  • phone_number.as_e164:将解析后的号码转换为E164格式字符串(如+62216333007)
  • 异常处理:若用户输入的不是有效电话号码,会触发PhoneNumberParseException,此时跳过转换逻辑,不影响其他字段的搜索

注意:请根据你的实际国家/地区修改region参数(例如中国用CN、美国用US)。

内容的提问来源于stack exchange,提问作者Reynaldo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:35:24