【问题标题】:Algolia model integration within Django - possible ways to handle various field typesDjango 中的 Algolia 模型集成 - 处理各种字段类型的可能方法
【发布时间】:2017-06-23 02:20:06
【问题描述】:

我有一个包含各种不同字段类型的模型,我希望 Algolia 搜索引擎能够正确索引。到目前为止,我已经能够非常直接地处理models.char_fields - 我现在在想,索引各种其他字段类型的最佳方法是什么(例如,ForeignKey“对象”、ImageFieldsDateTime 字段等等等)。

我注意到的一件事是 Algolia 将获取并存储 DateTimeField 作为 Unix 标准时间......所以,最初我认为我可以使用 {% humanize %} 在模板上呈现人类可读的内容,但没有运气。

我想知道是否有人知道从模型中拖出有用信息的方法 - 我的一个想法是在视图中抓取对象,然后为每个返回的对象带出唯一标识,然后进行一些条件流程将那个独特的身份与模特结合起来,然后我可以像往常一样与那个模特一起工作......?如:

def instant_search(request):
    posts = Post.published.all()

    context = {
        'appID': settings.ALGOLIA['APPLICATION_ID'],
        'searchKey': settings.ALGOLIA['SEARCH_API_KEY'],
        'indexName': get_adapter(Post).index_name,
        'posts': posts,
    }

    return render(request, 'blog/frame/instant_search.html', context)

模板内我可以使用{% for posts in post %} {% if post.id = _highlightResult.id.value %} ...do some stuff {% endif %} {% endfor %}

如果这还不够快(我几乎保证不会)我想知道 Algolia 是否可以处理关键信息,例如拖出模型中定义为的图像的 url ImageField 例如,就像我在模板中使用 post.image.url 或从模型中的 DateTime 字段 models.DateTimeField(default=timezone.now) 获取的人类可读值一样。这样做真的很好,因为 Algolia 索引定义的模型字段...

【问题讨论】:

    标签: django django-models django-templates django-views algolia


    【解决方案1】:

    刚想出来这个:

    models.py 中,我必须定义属性方法来获取经过操作的定制值,以便 Algolia 理解:

    例如,我在类中为我希望索引的模型定义了以下内容:

    def image_url(self):
        """Get upload_to path specific to this photo: Algolia recognizable format."""
        return self.image_scroll_1.url
    
    def published_date(self):
        """Returns a humanized date format for Algolia indexing."""
        humanized_published_date = str(self.publish.strftime("%A, %d, %B %Y %I:%M%p"))
        return humanized_published_date
    

    希望这将帮助其他正在使用 Algolia 并完成各种教程的人(我正在通过示例使用 Django)。

    这些可以在 index.py 中引用如下:

    从 algoliasearch_django 导入 AlgoliaIndex

    class PostIndex(AlgoliaIndex):
        fields = ('title', 'post_author', 'lead_in', 'published_date', 'keyword_tags', 'image_url', 'get_absolute_url')
    

    以及您可能喜欢的任何其他可选参数。

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-19
      • 2011-04-08
      • 1970-01-01
      • 2016-05-17
      • 2011-04-11
      相关资源
      最近更新 更多