0

Ich habe Blogposts und ich versuche, Kommentare zum Suchindex hinzuzufügen, aber es funktioniert nicht aus irgendeinem Grund ... Meine Kommentare hat generische Fremdschlüssel, wenn es Angelegenheiten. BTW, es funktioniert für die Tags.Heuhaufen - Kann kein Objekt mit vorbereiteten Feldern finden

class BlogIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    headline = indexes.CharField(model_attr="headline", null=True) 
    body = indexes.CharField(model_attr="body") 
    date = indexes.DateTimeField(model_attr='date') 
    mytags = indexes.MultiValueField() 
    mycomments = indexes.MultiValueField() 

    def prepare_mytags(self, obj): 
     return [tag.name for tag in obj.tags.all()] 

    def prepare_mycomments(self, obj): 
     cur_model = ContentType.objects.get_for_model(obj) 
     cur_comments = Comment.objects.filter(content_type=cur_model, object_pk=obj.id) 
     return [str(cur_c.content) for cur_c in cur_comments] 

    def get_model(self): 
     return Snip 

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

das ist meine Vorlage:

{{ object.headline }} 
{{ object.body }} 
{% for c in object.mycomments %}{{ c }} {% endfor %} 
{% for tag in object.tags.all %}{{ tag.name }} {% endfor %} 

Ich bin auch DRF-Heuhaufen, wenn es darauf ankommt, und dies ist der Serializer mit:

class BlogSearchSerializer(HaystackSerializer): 
    class Meta: 
     index_classes = [BlogIndex] 

     fields = [ 
      "headline", "body", "date", "mytags", 'mycomments', "content", 
     ] 

Wenn ich bin auf der Suche mit content = XX es findet nichts in den Kommentaren.

Was mache ich falsch?

Dank R

Antwort

0

Ihre Vorlage ist falsch - Sie dies ausdrücklich tun:

{% for c in object.mycomments %}{{ c }} {% endfor %} 

object in diesem Fall ist eine Instanz von Blog, keine Instanz von BlogIndex. Die Template-Engine wird nichts finden und nichts tun. Sie wollen wahrscheinlich diese stattdessen tun:

{% for c in object.comment_set.all %}{{ c }}{% endfor %} 

Unter der Annahme, dass Ihre Kommentare ein Fremdschlüssel für die Blog Artikel haben, dass sie angebracht sind.

Sie müssen diese nicht separat indizieren in BlogIndex.mycomments, es sei denn, Sie möchten mehr als nur suchen (z. B. Filterung/Facettierung).

+0

Das Problem ist der fremde Schlüssel des Kommentars ist generischer Fremdschlüssel und deshalb kann ich comment_set AFAK nicht verwenden. Vielen Dank! – Rani

+0

Ich habe es irgendwie behoben, aber nicht ganz. Ich habe 'comments = GenericRelation (Comment)' zu meinem Blog-Modell hinzugefügt, und jetzt kann ich es indizieren und es mit /? Content = XX suchen, aber ich kann nicht nur in den Kommentaren suchen, und ich kann die Kommentare nicht im Ergebnis anzeigen mit drf-Heuhaufen. – Rani

+0

Sie können Ihrem 'Blog'-Modell eine Methode hinzufügen, z. B.' get_comments', die die aktuelle Logik in 'BlogIndex.prepare_mycomments' ausführt und eine Reihe von Kommentaren zurückgibt. Dann können Sie in der Vorlage mit 'object.get_comments' darauf zugreifen. – solarissmoke

Verwandte Themen