我将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 - 使用Algolia为Django索引Taggit标签: '_TaggableManager'对象没有属性 'name'-LMLPHP

您可以查看我们的Django演示的 taggit branch,它演示了这些步骤。

07-26 09:31