2010-04-28 30 views
1

我有一個簡單的地址簿應用程序,我想讓搜索。該模型將看起來像:django多字段搜索的簡單方法

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) 

...和搜索的領域,但我想這是一廂情願的想法......我應該如何看待這種使用基本Django和SqLite(這是一個學習練習)。

謝謝!

回答

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