2010-04-28 3 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

Смежные вопросы