(haystack + elasticsearch) {{ result.object.get_absolute_url }} 不起作用我有 get_absolute_url() 方法

问题描述

我的 haystack 和 elasticsearch 版本:

django-haystack==3.0
elasticsearch-5.3.3

我有 elastichsearch 和 haystack。我可以搜索自动完成工作正常,但是当我获得搜索结果时,我无法点击任何链接,它们指向我所在的同一页面

这是我的models.py:

class Product(TranslatableModel):
    translations = TranslatedFields(
    category = models.ForeignKey(Category,related_name = 'products',on_delete = models.CASCADE),name = models.CharField(max_length = 200,db_index = True),slug = models.SlugField(max_length = 200,db_index = True)
    )
    # image = models.ImageField(upload_to = 'products/%Y/%m/%d/',blank = True)
    description = models.TextField(blank = True)
    price = models.DecimalField(max_digits = 10,decimal_places = 2)
    available = models.BooleanField(default = True)
    created = models.DateField(auto_Now_add = True)
    updated = models.DateField(auto_Now = True)

    def __str__(self):
        return self.name 
    def get_absolute_url(self):
        return reverse('shop:product_detail',args = [self.id,self.slug])

这是我的 search_indexes.py:

from haystack import indexes
from . models import Product,ProductTranslation

class IndexProduct(indexes.SearchIndex,indexes.Indexable):
    text = indexes.CharField(document=True,use_template=True)
    description = indexes.CharField(model_attr = 'description')
    
    def get_model(self):
        return Product
class IndexProductTranslation(indexes.SearchIndex,indexes.Indexable):
    text = indexes.CharField(document = True,use_template = True)
    name = indexes.CharField(model_attr = 'name')
    name_auto = indexes.EdgeNgramField(model_attr = 'name')

    def get_model(self):
        return ProductTranslation

我在 shell 中尝试了 get_absolute_url() 方法

>>> from shop.models import Product
>>> p = Product.objects.latest('id')
>>> p.get_absolute_url()
'/uk/shop/10/test/detail/'

当我使用浏览器的检查器时,它的 href 属性中甚至没有任何内容

enter image description here

这是我的 search.html 文件

{% extends 'base.html' %}
{% load static %}
{% load i18n %}
{% load thumbnail %}
{% block content %}
    {% blocktrans with query as query %}
        <h1>Results for '{{ query }}'</h1>
    {% endblocktrans %}
    <div id='main' class='product-list'>
        {% if query %}
            {% for result in page.object_list %}
                <div class='item'>
                    {% if result.object.images.all %}
                        {% for image in result.object.images.all %}
                            <a href='{{ result.object.get_absolute_url }}'><img src="{% thumbnail image.img 300x300 %}" class = 'rounded'></a>
                        {% endfor %}
                    {% else %}
                        <a href='{{ result.object.get_absolute_url }}'><img src="{% static "images/no_image.png" %}" class = 'rounded'></a>
                    {% endif %}
                    <a href='{{ result.object.get_absolute_url }}'>{{ result.object.name }}</a>
                </div>
            {% empty %}
                    <h3>There are no results :(</h3>
            {% endfor %}
        {% endif %}
    </div>
{% endblock %}

如果您需要任何其他信息,我会给您,谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)