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?
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. –
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
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. –