2015-11-24 2 views
1

В настоящее время я с помощью Django пакет django-mptt, и я пытаюсь запустить .order_by() против фильтра, но он не работает - точнее, порядок не остается неизменным, независимо от того, что order_by() Я использую. Вот мой текущий код:Джанго-mptt order_by() не работает во время recursetree

views.py

class ArticleModalView(View): 
    def get(self, request): 
     article_id = request.GET['article_id'] 
     article = get_object_or_404(Article, id=article_id) 

     article_comments_recent = ArticleComment.objects.filter(article=article).order_by('-created') 

     return render(request, '_includes/_article-modal.html', {'article': article, 'article_comments_recent': article_comments_recent}) 

_article-modal.html

<ul class="root"> 
    {% recursetree nodes %} 
     <li> 
      {{ node.name }} 
      {% if not node.is_leaf_node %} 
       <ul class="children"> 
        {{ children }} 
       </ul> 
      {% endif %} 
     </li> 
    {% endrecursetree %} 
</ul> 

ответ

1

Так что я просто понял это! Я должен был смешивать несколько разных ответов, но это выглядит как решение выглядит следующим образом:.

Я сделал много .filter() order_by() цепи так же, как вы их там, и ничего не прыгает вне меня. Я никогда не пытался переносить этот заказ на шаблон без дальнейшей обработки объектов (обычно повторяя их), поэтому мне интересно, потерялся ли order_by() как часть ленивой оценки django? Может быть, попробуйте обернуть строку filter(). Order_by() в списке(), чтобы принудительно провести оценку там вместо того, чтобы ее отложить до какого-то более позднего времени?

via StackOverflow Question: "order_by() doesn't work with filter() in Django view"

article_comments_recent = ArticleComment.objects.filter(article=article).order_by('-created') 

Должно быть:

article_comments_recent = list(ArticleComment.objects.filter(article=article).order_by('tree_id', 'level', '-created')) 
Смежные вопросы