django简单的多场搜索方法

时间:2010-04-28 03:48:28

标签: django search field

我有一个简单的地址簿应用程序,我想要搜索。该模型看起来像:

class Address(models.Model):
    address1 = models.CharField("Address Line 1", max_length=128)
    address2 = models.CharField("Address Line 2", max_length=128)
    city     = models.CharField("City", max_length=128)
    state    = models.CharField("State", max_length=24)
    zipCode  = models.CharField("Zip Code", max_length=24)

    def __unicode__(self):
        return "%s %s, %s, %s, %s" % (self.address1, self.address2, self.city, self.state, self.zipCode)

class Entry(models.Model):
    name      = models.CharField("Name of Business", max_length=128)
    createdBy = models.ForeignKey(User)
    address   = models.ForeignKey(Address, unique=True)

    def __unicode__(self):
        return "%s - %s, %s" % (self.name, self.address.city, self.address.state)

我希望搜索相当宽松,例如:Bank of America Los Angeles 91345。看起来我想要一个包含所有这些元素的字段,我可以搜索它,但这似乎也是多余的。我希望我可以像这样在Entry模型中添加一个方法:

def _getSearchText(self):
    return "%s %s %s" % (self.name, self.address, self.mascot)
searchText = property(_getSearchText)

...并将其作为一个字段进行搜索,但我想这是一厢情愿的想法......我应该如何使用基本的Django和SqLite来处理这个问题(这是一个学习练习)。

谢谢!

1 个答案:

答案 0 :(得分:2)

如果你做的不仅仅是非常基本的搜索,你需要一个合适的全文数据库搜索引擎。

像django-sphinx这样的东西可能就是答案。 http://github.com/dcramer/django-sphinx

如果你真的只是为了弄乱django,一个非常简单的解决方案是拉出所有结果并使用正则表达式找出你的匹配。显然这是一个可怕的解决方案。

更好的解决方案是创建一个过滤器,以编程方式将搜索词添加到查询中。

https://docs.djangoproject.com/en/dev/ref/models/querysets/#filter

https://docs.djangoproject.com/en/dev/ref/models/querysets/#contains