我将Algolia Django integration与其中一个包含TaggitManager()
字段的模型一起使用时遇到了一些问题。运行此命令时,我当前被抛出以下错误:
$ python manage.py algolia_reindex
AttributeError: '_TaggableManager' object has no attribute 'name'
我看过Taggit documentation,但是我不确定我将如何与Algolia搜索索引方法概述的方法完美结合。
index.py:
import django
django.setup()
from algoliasearch_django import AlgoliaIndex
class BlogPostIndex(AlgoliaIndex):
fields = ('title')
settings = {'searchableAttributes': ['title']}
index_name = 'blog_post_index'
models.py:
from taggit.managers import TaggableManager
class Post(models.Model):
...some model fields...
tags = TaggableManager()
最佳答案
要使用您的Post字段为taggit
标签建立索引,您需要公开可调用的,它以字符串的列表形式返回博客文章的标签。
最好的选择是将它们存储为_tags
,这将使您成为filter on tags at query time。
您的PostIndex
如下所示:class PostIndex(AlgoliaIndex):
fields = ('title', '_tags')
settings = {'searchableAttributes': ['title']}
index_name = 'Blog Posts Index'
should_index = 'is_published'
至于Post
:class Post(models.Model):
# ...some model fields...
tags = TaggableManager()
def _tags(self):
return [t.name for t in self.tags.all()]
按照这些说明,您的记录将使用各自的标签建立索引:
您可以查看我们的Django演示的 taggit
branch,它演示了这些步骤。