2016-08-11 1 views
0

В шаблоне Django, я выборка новейший комментарий, используя:Django шаблон: Извлечение поля из модели QuerySet возражают

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

где blog является экземпляром Blog модели comments является related_name с ForeignKey к модель Comment.

Это эквивалент

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

Вопрос: Как я могу получить text поле для комментариев в шаблоне?

По мнению я могу сделать это с помощью:

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

Если я пытаюсь:

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

я получаю:

Не удалось разобрать остаток:».text 'TemplateSyntaxError

ответ

1
  • with тег:

    {% with newest_comment=blog.comments.all|dictsort:"created_at"|last %} 
        {{ newest_comment.text }} 
    {% endwith %} 
    
  • cached_property декоратор:

    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 }} 
    
  • контекст:

    context['newest_comment'] = blog.comments.order_by('created_at').last() 
    return render(request, template, context) 
    
  • latest() метод:

    models.py

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

    template.html

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

Вы уверены, что первый один ('with') не должно быть' {%%} '? – Jedi

+0

@ Jedi Edited. Благодаря! –

1

Один из способов будет использовать "с":

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