简体   繁体   English

Django haystack,搜索结果中没有网址

[英]Django haystack, no url in search results

I have haystack + django + aldryn-search setup for searches on my django-cms project.我有 haystack + django + aldryn-search 设置用于搜索我的 django-cms 项目。 I am trying to get indexes on my models to work, I can see results and the text description is fine, but the urls are always /search/none .我正在尝试使我的模型上的索引正常工作,我可以看到结果并且文本描述很好,但 url 总是/search/none How would I override the url definition?我将如何覆盖 url 定义?

search_indexes.py: search_indexes.py:

import datetime
from haystack import indexes
from .models import Event

class EventIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    title = indexes.CharField(model_attr='title')


    def get_model(self):
        return Event

    def index_queryset(self, using=None):
        "Used when the entire index for model is updated."
        return self.get_model().objects.order_by('created')

models.py模型.py

class Event(ChangesMixin, models.Model):
    ....
    title = models.CharField(max_length=40)
    ....

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return '/cab/event/%i/' % self.id

I see you're not subclassing the AldrynIndexBase or AbstractIndex base indexes from aldryn-search , this means you'll need to define the url field since you're subclassing haystack's builtin index class which does not come with any fields predefined.我看到您没有从aldryn-search子类化AldrynIndexBaseAbstractIndex aldryn-search ,这意味着您需要定义 url 字段,因为您要子类化 haystack 的内置索引类,该类没有预定义任何字段。

You can easily add it like so:您可以像这样轻松添加它:

class EventIndex(indexes.SearchIndex, indexes.Indexable):
    url = indexes.CharField(model_attr='get_absolute_url')

Or:或者:

class EventIndex(indexes.SearchIndex, indexes.Indexable):
    url = indexes.CharField()

    def prepare_url(self, obj):
        return obj.get_absolute_url()

I recommend approach number two because approach number one behaves differently if the provided attribute string has double underscores like get__title woul look for event.get.title instead of event.get__title.我推荐方法二,因为如果提供的属性字符串有双下划线,如 get__title 将查找 event.get.title 而不是 event.get__title,方法一的行为会有所不同。

If your Event model supports multiple languages using libraries like django-hvad or django-parler, I highly recommend you use AldrynIndexBase or AbstractIndex instead of haystack's indexes.SearchIndex```.如果您的Event模型使用 django-hvad 或 django-parler 等库支持多种语言,我强烈建议您使用 AldrynIndexBase or AbstractIndex instead of haystack's index.SearchIndex```。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM