3

我试图让Django的草垛这里(使用Xapian的后端)索引我的模型搜索,由namedescription领域。在django-haystack中,我如何使用模型的子类?

我有一个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的干草堆的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一个实例?

回答

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

...草堆教程是有点混乱对这个问题(你实际上并没有使用文本文件模板,为一个),但其基本思想是,草堆的引擎去镇上无论文本数据在这个模板中。

实际上,它去镇上无论是在你发送的响应,但如果你已经有了模板设置,你可以使用你在那里想要的任何Django的模板逻辑。 (请注意,在Django 1.2之前,if模板标签有点像是狗的早餐;如果您被困在较早的Django版本中,您可能需要调整语法,但原理相同。)

+0

谢谢:)这并获得成功。 – 2010-10-19 23:03:30

+0

很高兴听到它。 – fish2000 2010-10-19 23:35:47

相关问题