2016-06-12 3 views
0

내가 내 템플릿에 이런 식으로 뭔가를 보여줄 필요가 :Django에서 출력을 날짜순으로 그룹화하려면 어떻게해야합니까?

6월 11일

  • 데이터 1
  • 데이터 2

6월 10일

  • 데이터 3
  • 데이터 4

내보기 :

def Inicio(request): 
    g = Gastos.objects.all() 
    return render(request, 'principal/gastos.html', {'g': g}) 

내 모델 :

class Gastos(models.Model): 
    ... 
    fecha = models.DateTimeField(auto_now_add=True, auto_now=False) 
    ... 

내가, 모델의 필드 "fecha"의 일에 의해 그룹에 필요 나는 이것을 어떻게하는지 모른다.

편집 나는 collections.defaultdict을 사용 :

내보기 :

def Inicio(request): 
    g = Gastos.objects.all() 
    lista = defaultdict(list) 
    for gasto in g: 
     lista['%s %s' %(gasto.fecha.day, gasto.fecha.strftime("%B"))].append(gasto) 
    return render(request, 'principal/gastos.html', {'lista': lista}) 

내가 파이썬 쉘에서 "중고 장비 구매"를 인쇄하는 경우 :

defaultdict(<type 'list'>, {"12 June": [<Gastos: Gasolina>, <Gastos: mandado>], "13 June": [<Gastos: Ropa>]}) 

내가 원하는 것을 얻었다 ,하지만 문제는 템플릿에, 나는 각 개체를 반복 할 수 없습니다.

내 템플릿 : HTML에서

{% for dia in lista %} 
    <h3>{{dia}}</h3> 
    {% for g in dia.items %} 
     <li>{{g.producto}}</li> 
    {% endfor %} 
{% endfor %} 

결과 (데이터 없음) :

6월 12일

6월 13일

+0

pls는 데이터를 날짜별로 그룹화 할 수있는'collections.defaultdict'를 살펴 봅니다. –

+0

@AvinashRaj 당신이 말한대로 collections.defaultdict를 사용했습니다. 편집 된 질문을 확인해 주시겠습니까? – hectorlr22

+0

@AvinashRaj "12 월 6 일"만 인쇄하지만 안에있는 객체를 반복 할 수는 없습니다 – hectorlr22

답변

0

lista은 사전 그래서 우리는 무료입니다 사전에 items 함수를 적용하려면 키, 값 쌍을 얻습니다. 따라서 코드는 다음과 같아야합니다.

{% for key, value in lista.items %} 
    <h3>{{key}}</h3> 
    {% for g in value %} 
     <li>{{g.producto}}</li> 
    {% endfor %} 
{% endfor %} 
+0

'for dia for lista'는 dict 키를 통해서만 반복됩니다. –

+0

dict() 함수를 사용하여 일반 사전의 defaultdict()를 변환 한 다음 템플릿에 보내고 템플릿에 "lista.iterit에있는 키, 값"을 사용했습니다. 파이썬 2.7을 사용하기 때문에 , 고마워요;) – hectorlr22

+0

defaultdict obj는 이미 dict obj입니다.'items'를'iteritems'로 바꿔줘야합니다. –

관련 문제