2017-12-19 1 views
1

Django 쿼리 세트에서 (반복 할 때) 목록 항목이 특정 속성을 갖는 목록 항목인지 어떻게 알 수 있습니까?Django는 특정 속성을 가진 마지막 항목이 이중 순서 (order_by)인지 알려줍니다.

예 : 나는하여 검색어 세트를 주문 :

MyModel.objects.all().order_by('-featured', '-created_at') 

그래서, 다음 제대로뿐만 아니라 시간으로 분류 이외의 모든 기능을 갖춘 아이템을 적절한 시간에 첫번째 기능 및 모든 개체.

템플릿에서 반복 할 때 필자가 이중 주문에서 마지막 "추천"항목에 도달했는지 여부를 알 수 있기를 원합니다 (예 : featured = True).

예제 사용법 : 마지막 항목 -> 특징/비 기능별 배너 표시 -> 기능이없는 애프터 배너를 반복하여 반복하는 경우.

{% for object in object_list %} 
    # display object 
    {% if last item with attribute %} 
      # display banner 
    {% endif %} 
{% endfor %} 

은 내가 카운트를 얻을 수있는 또 다른의 검색어를 할 수있어,하지만 내가하지 않으려는 추가 쿼리입니다.

답변

2

itertools.groupby을 사용하여 쿼리 세트의 항목을 그룹화 한 다음 템플릿에 전달할 수 있습니다. 템플릿에서

from itertools import groupby 

qs = MyModel.objects.all().order_by('-featured', '-created_at') 
grouped_qs = groupby(qs, lambda x: x.featured) 

그리고 :

{% for k, g in grouped_qs %} 
    {% if not k %} 
     <!- show banner --> 
    {% endif %} 

    {% for model_obj in g %} 
     <!- do something with model_obj --> 
    {% endfor %} 
{% endfor %} 
+0

이 엉망 내가 보존해야하는 시간의 순서를하지 않습니다 True에서 False에 그룹 키 변경하는 경우 다음 당신은 배너를 보여 드리겠습니다 ? – Overflow2341313

+0

@ Overflow2341313 아니요. –

+0

굉장합니다. 솔루션을 가져 주셔서 감사합니다. 할 수있을 때 받아 들일 것입니다. – Overflow2341313

관련 문제