В django-haystack, как я могу использовать подклассы моделей? - PullRequest
3 голосов
/ 16 октября 2010

Я пытаюсь получить django-haystack (используя xapian backend), чтобы проиндексировать мою модель здесь для поиска по полям name и description.

У меня есть подкласс Item, Device, который добавляет поле manufacturer.

Модель Item определяется следующим образом:

class Item(models.Model):
    name = models.CharField(max_length=255, unique=True)
    description = models.TextField(null=True, blank=True)
    compatible_with = models.ManyToManyField('self', null=True, blank=True)
    often_with = models.ManyToManyField('self', null=True, blank=True)
    created_by = models.ForeignKey(User, null=True, blank=True, related_name='created_by')
    verified = models.BooleanField(default=False)
    verified_by = models.ForeignKey(User, null=True, blank=True, related_name='verified_by')
    date_created = models.DateField(auto_now_add=True)
    slug = models.SlugField(max_length=300, null=True, blank=True)

Мой подкласс django-haystack's SearchIndex выглядит так:

class ItemIndex(SearchIndex):
    text = CharField(document=True, use_template=True)
    name = CharField(model_attr='name')
    description = CharField(model_attr='description')

site.register(Item, ItemIndex)

Я настроил этот шаблон в templates/search/indexes/catalog/item_text.txt:

{{ object.name }}
{{ object.description }}

Что я могу добавить к item_text.txt, чтобы поле manufacturer было проиндексировано, если и только если объект модели является экземпляром Device?

1 Ответ

3 голосов
/ 16 октября 2010
{% if device.manufacturer %}
{{ device.manufacturer }}
{% endif %}

... учебник Haystack немного сбивает с толку по этому вопросу (например, вам не нужно использовать шаблон текстового файла), но основная идея заключается в том, что движок Haystack отправляется в город на любых текстовых данных в этом шаблоне.

... На самом деле, он отправляется в город, в зависимости от того, какой ответ вы отправили, но если у вас есть настроенный шаблон, вы можете использовать любую логику шаблона Django, какую захотите.

(обратите внимание, что тег шаблона if был чем-то вроде собачьего завтрака до Django 1.2; если вы застряли на более ранней версии Django, вам, возможно, придется настроить синтаксис, но принцип тот же.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...