我有以下型号:
class Artist(models.Model):
cell_phone = models.CharField(20)
pr_phone = modelsCharField(20)
在我的模板中,我可以搜索输入的电话号码与手机或PR手机匹配的所有艺术家。假设最初输入的电话号码没有限制,那么电话号码可以采用以下任何格式存储:
123 456 7890
(123) 456-7890
123-456-7890
蛮力的方式是:
# variable input_phone has already been stripped of dashes, braces and spaces
all_artists = Artists.objects.all()
artists = []
for artist in all_artists:
cell_phone = artist.cell_phone
pr_phone = artist.pr_phone
if cell_phone.find(input_phone) >= 0 or pr_phone.find(pr_phone) >= 0:
artists.append(artist)
return artists
我正在使用find
因为我还可以搜索所有居住在特定区号内的艺术家。有没有通过Django的查询过滤器的上述方法?
答案 0 :(得分:1)
此问题与相对日期处理非常相似。基本上,你需要有两个字段:一个用于用户的显示(123)-456-789,一个用于内部使用,剥离并清理到12345678.然后查询任何数字都不是问题,__contains
应该工作得恰到好处。
是的 - 这是双倍的数据量(虽然对于电话号码我认为可以忽略不计),但这完全是值得的。
答案 1 :(得分:0)
我认为最好的方法是使用django Q对象(http://docs.djangoproject.com/en/1.1/topics/db/queries/#complex-lookups-with-q-objects)
所以我相信这段代码对你有用:
from django.db.models import Q
Artists.objects.filter(Q(cell_phone=input_phone) | Q(pr_phone=input_phone))
它应该返回所有拥有与input_phone匹配的手机或公共电话号码的艺术家。