代码之家  ›  专栏  ›  技术社区  ›  Scott

django多域搜索的简单方法

  •  1
  • Scott  · 技术社区  · 15 年前

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

    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 . 似乎我想要一个包含所有这些元素的字段成为一个可以搜索的字段,但这似乎也是多余的。我希望我可以在条目模型中添加这样的方法:

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

    ……把它作为一个领域来研究,但我想那是一厢情愿的想法……我应该如何使用basic django和sqlite来实现这一点(这是一个学习练习)。

    谢谢您!!

    1 回复  |  直到 7 年前
        1
  •  2
  •   Philipp Zettl Paul McMillan    7 年前

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

    答案可能是Django Sphinx之类的东西。 http://github.com/dcramer/django-sphinx

    如果你真的只是为了搞乱django,一个非常简单的解决方案是提取所有结果并使用regex来计算匹配项。显然这是一个糟糕的解决方案。

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

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

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