我正在尝试使用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)
我的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
字段被编入索引?
答案 0 :(得分:3)
{% if device.manufacturer %}
{{ device.manufacturer }}
{% endif %}
... Haystack教程在这个主题上有点令人困惑(你实际上不需要使用文本文件模板),但基本的想法是Haystack的引擎在任何文本数据上都会进入城镇在这个模板中。
......实际上,它会发送到您发送的响应中的任何内容,但如果您已经设置了模板,则可以使用您想要的任何Django模板逻辑。
(请注意,if
模板标签在Django 1.2之前有点像狗的早餐;如果你坚持早期的Django版本,你可能需要调整语法,但原理是一样的。)