在django-haystack中,我如何使用模型的子类?

时间:2010-10-15 23:57:11

标签: django django-models django-templates django-haystack django-inheritance

我正在尝试使用django-haystack(使用xapian后端)在namedescription字段中搜索我的模型以进行搜索。

我有一个ItemDevice的子类,它会添加一个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 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 个答案:

答案 0 :(得分:3)

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

... Haystack教程在这个主题上有点令人困惑(你实际上不需要使用文本文件模板),但基本的想法是Haystack的引擎在任何文本数据上都会进入城镇在这个模板中。

......实际上,它会发送到您发送的响应中的任何内容,但如果您已经设置了模板,则可以使用您想要的任何Django模板逻辑。

(请注意,if模板标签在Django 1.2之前有点像狗的早餐;如果你坚持早期的Django版本,你可能需要调整语法,但原理是一样的。)