我正在尝试使用./manage.py update_index --remove
管理命令从搜索索引中删除结果。
我想删除这些对象,而不是删除它们时的对象:
enabled = models.BooleanField()
字段为False
我在这做什么?我还需要准备SearchIndex吗?
import datetime
from haystack.indexes import *
from haystack import site
from articles.models import Article
class ArticleIndex(SearchIndex):
text = CharField(document=True, use_template=True)
title = CharField(model_attr='title')
content = CharField(model_attr='content')
def get_queryset(self):
"""Used when the entire index for model is updated."""
return Article.site_published_objects.filter(enabled=True)
def get_updated_field(self):
return 'modified'
def remove_object(self):
pass
site.register(Article, ArticleIndex)
谢谢。
答案 0 :(得分:7)
我没有对此进行测试,但您可以通过将搜索索引模板包装在一个条件中来实现所需的效果,例如:
{# in search/indexes/yourapp/article_text.txt #}
{% if object.enabled %}
{# ... whatever you have now #}
{% endif %}
当您运行./manage.py update_index
时,带有enabled=False
的文章最终会没有与之关联的数据,也不会显示在搜索结果中。
查看SearchIndex
的来源,有一个remove_object()
方法从索引中删除对象。还运行should_update()
来确定是否应该更新对象的索引。
也许可以使用以下内容触发索引删除:
class ArticleIndex(SearchIndex):
# ...
def should_update(self, instance, **kwargs):
if not instance.enabled:
self.remove_object(instance, **kwargs)
return instance.enabled