2016-03-20 8 views
0

私はhaystackを使用しています。私はチュートリアルに従います。私はhaystackがオブジェクトを返す場合、なぜ私はresult.objects.get_absolute_urlを使用できません。

を追加し、私は

search/indexes/blog/post_text.txt 

を作成して、私のviews.pyで

{{ object.title }} 
{{ object.tags.all|join:", " }} 
{{ object.body }} 

これを追加し、私は設定に干し草を追加し、移行し、その後、私は、テンプレートでこの

class PostIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    publish = indexes.DateTimeField(model_attr='publish') 

    def get_model(self): 
     return Post 

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

を作成します

from haystack.query import SearchQuerySet 

次にav IEW

def post_search(request): 

    form = request.GET.get('q') 
    results = SearchQuerySet().models(Post).filter(content=form) 
    # count total results 
    total_results = results.count() 
    template = 'blog/post/search.html', 
    context = { 
     'form': form, 
     'results': results, 
     'total_results': total_results 

    } 
    return render(request, template, context) 

と検索テンプレート

{% for result in results %} 
    <p>{{result.publish}}</p> 

    <a href="{{ result.object.get_absolute_url }}">{{ result.object.title }}</a> 

が、公開され返されるだけの事で機能。私が要素を調べると、hrefは空白になります。私はこの

{{results}} 

を行う場合、私は、これらが

{{result.object.publish}}<br> 

を動作しませんが、これは {{result.publish}}

意志この

[blog.post.pk(2)] or something like that 

のような何かを得ますアクセスするには

{{result.object.body}}<br> 
{{result.object.title}}<br> 
{{result.object.slug}}<br> 

私は戻って、チュートリアルは、私が間違って何をやっていると言うようなものではありません。この

class PostIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    publish = indexes.DateTimeField(model_attr='publish') 

    # added this 
    title = indexes.CharField(model_attr='title') 
    body = indexes.CharField(model_attr='body') 
    slug = indexes.CharField(model_attr='slug') 

    def get_model(self): 
     return Post 

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

を追加しますか?

私は私の結果は、この

result.title 

ない

result.object.title 

と私は見て、読んでチュートリアルから、彼らが行うすべては、この

class PostIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    publish = indexes.DateTimeField(model_attr='publish') 

    def get_model(self): 
     return Post 

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

ですが、すべてにアクセスすることができますをやって買う取得

このように

result.object.title 
result.object.publish 
result.object.get_absolute_url 

明らかにオブジェクト全体にアクセスしていますが、なんらかの理由で私はそうではありません。私がビデオのように見えるかもしれない何かへの指導や提案は となります。私は本当になぜオブジェクト全体にアクセスしていないのか分からない。

編集:

マイモデルです。PY

class Post(models.Model): 

STATUS_CHOICES = (
    ('draft', 'Draft'), 
    ('published', 'Published'), 
) 
title = models.CharField(max_length=250) 
slug = models.SlugField(max_length=250, 
         unique_for_date='publish') 
image = models.ImageField(null=True, blank=True) 
author = models.ForeignKey(User, 
          related_name='blog_posts') 
body = models.TextField() 
publish = models.DateTimeField(default=timezone.now) 
created = models.DateTimeField(auto_now_add=True) 
updated = models.DateTimeField(auto_now=True) 
status = models.CharField(max_length=10, 
          choices=STATUS_CHOICES, 
          default='draft') 
video = models.BooleanField(default=False) 
video_path = models.CharField(max_length=320, 
           null=True, 
           blank=True,) 

class Meta: 
    ordering = ('-publish',) 

def __str__(self): 
    return self.title 

def get_absolute_url(self): 
     return reverse('blog:post_detail', 
         args=[self.publish.year, 
          self.publish.strftime('%m'), 
          self.publish.strftime('%d'), 
          self.slug]) 

objects = models.Manager() # The default manager. 
published = PublishedManager() # Our custom manager. 
tags = TaggableManager() 

私はアイブが更新され、私のスキーマを再構築し、私はマイク・ヒバートが続き、一例でジャンゴという本を読ん

Django==1.9.4 
django-crispy-forms==1.6.0 
django-haystack==2.4.1 
django-taggit==0.18.0 
Pillow==3.1.1 
pysolr==3.4.0 
pytz==2016.1 
requests==2.9.1 
python 3.5 

を使用していますが逐語的にそれらをfollwed、まだそれを把握するカント。これはバグの一部ですか?

+0

あなたのモデルでこのメソッドを定義する必要があると思います。 HaystackはURL自体を推測することはできないので、あなたは 'reverse()'でurlを構築して返すべきです。 –

+0

応答に感謝します。私が見たビデオのどれも、あなたが言ったことや、私が読んだことのない何かをしたことはありません – losee

+0

クイック検索の後、あなたと同じ問題を抱えている人が見つかりました:http://stackoverflow.com/questions/ 27968892/haystack-whoosh-result-object-get-absolute-url-is-workingを取得します。ドキュメントにはアップデートが必要だと思います。 –

答えて

0

これを約3日後に調べたところ、私はdjango 1.9が完全にサポートされていないという情報を見てきました。これはうまくいけば問題であるかもしれません。これは誰かが私が経験した苦悩を惜しまないことを願っています。

0

私は同様の、あるいはおそらく同じ問題を抱えていました。

何らかの理由で、結果を含むHaystackSearchQuerysetにアクセスした後に、get_absolute_urlメソッド内の逆引きが失敗しました。逆の仕組みに分析するパターンがないように見えました( "...試みたパターン:[]")。私はちょうどlastest masterをインストールしてDjangoの1.9互換性の問題の方を向いて

あなたの提案は私をたくさん助けたし、すべてがうまくnow.Django 1.9の互換性は、クロード・Perozでhereを添加して動作するようです。 Yay :-)

関連する問題