2016-08-11 6 views
0

In einem Django-Vorlage-Objekt, ich bin den neuesten Kommentar zu holen mit:Django Vorlage: Extrahieren Feld von Modell QuerySet

{{ blog.comments.all|dictsort:"created_at"|last }} 

wo blog ist eine Instanz des Blog Modells ist comments die related_name mit einem ForeignKey zu das Modell Comment.

Dies ist das Äquivalent von

blog.comments.all().order_by("created_at").last() 

Frage: Wie kann ich das text Feld für den Kommentar in der Vorlage erhalten?

In der Ansicht, die ich dies mit tun können:

blog.comments.all().order_by("created_at").last().text 

Wenn ich versuche:

{{ blog.comments.all|dictsort:"created_at"|last.text }} 

ich a:

den Rest nicht analysieren kann:‘.text 'TemplateSyntaxError

Antwort

1
  • with tag:

    {% with newest_comment=blog.comments.all|dictsort:"created_at"|last %} 
        {{ newest_comment.text }} 
    {% endwith %} 
    
  • cached_property Dekorateur:

    models.py

    from django.utils.functional import cached_property 
    
    class Blog(models.Model): 
        @cached_property 
        def newest_comment(self): 
         return self.comments.order_by('created_at').last() 
    

    template.html

    {{ blog.newest_comment.text }} 
    
  • Kontext:

    context['newest_comment'] = blog.comments.order_by('created_at').last() 
    return render(request, template, context) 
    
  • latest() Methode:

    models.py

    class Comment(models.Model): 
        class Meta: 
         get_latest_by = 'created_at' 
    

    template.html

    {{ blog.comments.latest.text }} 
    
+0

Sind Sie sicher, dass der erste ('with') sollte nicht' {%%} '? – Jedi

+0

@ Jedi Herausgegeben. Vielen Dank! –

1

Eine Möglichkeit, die "mit" zu verwenden, wäre:

{% with blog.comments.all|dictsort:"created_at"|last as lastcomment %} 
    {{ lastcomment.text }} 
{% endwith %}