Django查询除括号外的电话号码

时间:2011-06-06 00:56:59

标签: python django

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

例如

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

由于

3 个答案:

答案 0 :(得分: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.us的{​​{1}},则会强制所有新电话号码以PhoneNumberField格式保存。如果你没有以某种方式规范电话号码,你应该这样做。处理多种潜在格式并不好玩。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

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