У меня есть простое приложение адресной книги, которое я хочу сделать доступным для поиска. Модель посмотрела бы что-то как:
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 (это - осуществление изучения).
Спасибо!!
Если вы делаете что-то большее, чем простой поиск, вам нужна полноценная полнотекстовая поисковая машина по базам данных.
Что-то вроде 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