2024-04-18 17:17:21 发布
网友
我试图构建一个django查询,过滤电话号码(CharField),但不包括括号
CharField
例如
如果我搜索0123456789,它会找到(01) 234 567 89
0123456789
(01) 234 567 89
谢谢
可以使用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的PhoneNumberField,它会强制所有新电话号码以XXX-XXX-XXXX格式保存。如果你不把电话号码规范化,你应该这样做。处理多种可能的格式并不是一件有趣的事。在
django.contrib.localflavors.us
PhoneNumberField
XXX-XXX-XXXX
也可以在查找中使用正则表达式。参见:https://docs.djangoproject.com/en/dev/ref/models/querysets/#s-regex
我从不喜欢回答自己的问题,但这个解决方案可能对其他人做类似的事情有所帮助:
我使用@property修饰符在模型上定义了一个函数。在
@property
class MyModel(models.model): .... phoneNumber = CharField... @property def raw_phone_number(self): # function strips those characters and returns just the number
可以使用regex,也可以重新设置搜索格式:
理想情况下,你将所有的电话号码标准化,然后以那种格式搜索它们。例如,如果您签出
django.contrib.localflavors.us
的PhoneNumberField
,它会强制所有新电话号码以XXX-XXX-XXXX
格式保存。如果你不把电话号码规范化,你应该这样做。处理多种可能的格式并不是一件有趣的事。在也可以在查找中使用正则表达式。参见:https://docs.djangoproject.com/en/dev/ref/models/querysets/#s-regex
我从不喜欢回答自己的问题,但这个解决方案可能对其他人做类似的事情有所帮助:
我使用
@property
修饰符在模型上定义了一个函数。在相关问题 更多 >
编程相关推荐