Как я могу использовать подклассы моделей в django-haystack?

Я пытаюсь заставить django-haystack (используя бэкэнд xapian) индексировать мою модель здесь для поиска по полям 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)

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

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?


person Sri Raghavan    schedule 15.10.2010    source источник


Ответы (1)


{% if device.manufacturer %}
{{ device.manufacturer }}
{% endif %}

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

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

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

person fish2000    schedule 16.10.2010