В Django-haystack есть примеры того, как сделать одно приложение доступным для поиска. Мы это прекрасно!
Однако, если у вас есть более одного приложения, и каждое из них связано с пользователем, как бы вы поступили
имея стог сена (граненый), чтобы вы могли искать то, что вы хотите. Скажем, на всех трех из этих моделей.
Пример: показать мне всех пользователей мужского пола, которые имеют в своем описании ключевое слово "опытный" и которые также имеют
навык с именем «Аналитик», в ключевых словах которого содержится слово «бла».
Я гуглил без результата. Итак, я собираюсь добавить несколько приложений на одну и ту же страницу поиска.
class UserProfile(models.Model):
GENDER_MALE = 1
GENDER_FEMALE = 2
GENDER_CHOICES = (
(GENDER_MALE, 'Male'),
(GENDER_FEMALE, 'Female'),
)
user = models.OneToOneField(User, related_name="%(class)s", unique=True)
full_name = models.CharField(
_("Full name"),
max_length=200,
blank=True,
)
gender = models.IntegerField(
_('Gender'),
choices=GENDER_CHOICES,
blank=False,
null=True,
)
# common
country = CountryField(
_('Country'),
null=True,
blank=False,
)
# common
about = models.TextField(
_('About Me'),
blank=True,
validators=[MaxLengthValidator(400)],
)
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
def __unicode__(self):
return u'%s' % (self.user.username)
class Skill(models.Model):
user = models.ForeignKey(
User,
related_name="%(class)s"
)
name = models.CharField(
_('Skill Name'),
max_length=70,
null=False
)
category = models.ForeignKey(
'self',
blank=True,
null=True
)
is_active = models.BooleanField(
default=True
)
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
def __unicode__(self):
return u'%s' % (self.name)
class Info(models.Model):
user = models.ForeignKey(
User,
related_name="%(class)s",
null=False
)
description = models.TextField(
blank=False,
)
keywords = models.CharField(
blank=True,
null=True,
max_length=56,
)
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
def __unicode__(self):
return u'%s' % self.title