Django查询电话号码(不包括括号)

2024-04-18 17:17:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图构建一个django查询,过滤电话号码(CharField),但不包括括号

例如

如果我搜索0123456789,它会找到(01) 234 567 89

谢谢


Tags: django电话号码括号charfield
3条回答

可以使用regex,也可以重新设置搜索格式:

pn = '0123456789'
Model.objects.filter(phone='(%s) %s %s %s' % (pn[:2], pn[2:5], pn[5:8], pn[8:]))

理想情况下,你将所有的电话号码标准化,然后以那种格式搜索它们。例如,如果您签出django.contrib.localflavors.usPhoneNumberField,它会强制所有新电话号码以XXX-XXX-XXXX格式保存。如果你不把电话号码规范化,你应该这样做。处理多种可能的格式并不是一件有趣的事。在

也可以在查找中使用正则表达式。参见:https://docs.djangoproject.com/en/dev/ref/models/querysets/#s-regex

我从不喜欢回答自己的问题,但这个解决方案可能对其他人做类似的事情有所帮助:

我使用@property修饰符在模型上定义了一个函数。在

class MyModel(models.model):
    ....
    phoneNumber = CharField...

    @property
    def raw_phone_number(self):
        # function strips those characters and returns just the number

相关问题 更多 >