2016-03-20 2 views
0

Ich benutze Heuhaufen und ich folge den Tutorials. Ich füge Heuhaufen zu Einstellungen, wandern, dann schaffe ich dasWenn Heuhaufen ein Objekt zurückgibt, warum kann ich nicht result.objects.get_absolute_url verwenden

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() 

in Vorlagen I

search/indexes/blog/post_text.txt 

erstellen und diese

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

in meinem views.py, um es hinzuzufügen i hinzufügen

from haystack.query import SearchQuerySet 

dann in AV iew Funktion

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) 

und in einer Suchvorlage

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

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

aber das einzige, was zurückgegeben wird ist die veröffentlichen. Wenn ich das a-Element überprüfe, ist die href leer. wenn ich dies tun

{{results}} 

ich so etwas wie dieses

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

diese nicht funktionieren

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

aber das wird {{}} result.publish

und auf diese zuzugreifen

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

Ich gehe zurück und fügen Sie diese

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() 

das ist nichts, wie die Tutorials sagen, was mache ich falsch?

ich meine Ergebnisse kaufen, dies zu tun

result.title 

nicht

result.object.title 

und von den Tutorials, die ich sehen und lesen Sie alles, was sie tun dies

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() 

ist aber alles zugreifen wie dieses

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

sie sind offensichtlich Zugriff auf das gesamte Objekt, aber aus irgendeinem Grund bin ich nicht. jede Anleitung oder ein Vorschlag zu etwas, das ich möglicherweise wie ein Video sehen könnte, würde geschätzt werden. Ich verstehe wirklich nicht, warum ich nicht auf das ganze Objekt zugreife.

Bearbeiten:

meine Modelle.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() 

Ich verwende

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 

Ive aktualisiert und mein Schema wieder aufgebaut, und ich folgte Mike Hibbert und ein Buch namens django mit gutem Beispiel lesen follwed sie wörtlich und kann immer noch nicht es herausfinden. Ist das ein kinf = d Bug?

+0

Ich denke, Sie müssen diese Methode auf Ihrem Modell definieren. Haystack kann die URL nicht selbst erraten, also sollten Sie die URL mit 'reverse()' erstellen und zurückgeben. –

+0

Danke für die Antwort. Keines der Videos, die ich gesehen habe, hat getan, was du gesagt hast, noch eines der Tuts, die ich gelesen habe. – losee

+0

Nach einer schnellen Suche habe ich jemanden mit dem gleichen Problem wie du gefunden: http://stackoverflow.com/questions/ 27968892/Heuhaufen-Whoosh-Ergebnis-Objekt-Get-Absolute-URL-ist-nicht-arbeiten. Ich denke, die Dokumentation benötigt ein Update. –

Antwort

0

nachdem ich dies für ungefähr 3 Tage jetzt erforscht habe, bin ich auf Informationen gestoßen, dass django 1.9 nicht völlig unterstützt wird, also kann dieses das Problem hoffentlich sein. Hoffe, das schont jemanden die Angst, die ich durchgemacht habe.

0

Ich hatte ein ähnliches oder wahrscheinlich sogar das gleiche Problem.

Aus irgendeinem Grund fehlgeschlagen Reverse-Lookups innerhalb meiner get_absolute_url-Methode, nachdem ich auf das HaystackSearchQueryset zugegriffen hatte, das die Ergebnisse enthält. Es schien, als ob der umgekehrte Mechanismus keine Muster zu analysieren hätte ("... patterns probiert: []").

Ihr Vorschlag Django 1.9 Inkompatibilitäten zeigt auf mich hat mir sehr geholfen, als ich scheint installiert nur die lastest master und alles gut now.Django 1.9 Kompatibilität here von Claude Peroz wurde zu arbeiten. Yay :-)

Verwandte Themen