2013-04-26 4 views
2

내 Django 템플릿에서 그룹 및 항목을 반복 할 수 있기를 원하지만 해당 그룹 아래 항목을 반복하고 싶습니다. 지금까지 나는 이것들을 반복 해 보았습니다 만, 아이템이 어느 그룹에 속하는지는 보여주지 않습니다. 템플릿을 반복하여이 포함을 얻으려면 어떻게해야합니까?Django에서 특정 그룹의 항목 반복

조회수 :

def manage(request): 
    group_list = Group.objects.order_by('name').filter(user=request.user) 
    item_list = Item.objects.order_by('name').filter(user=request.user) 
    return render(request, 'manage.html', {'group_list': group_list, 'item_list': item_list}) 

템플릿 :

class Group(models.Model): 
    user = models.ForeignKey(User) 
    name = models.CharField(max_length=30) 

class Item(models.Model): 
    user = models.ForeignKey(User) 
    group = models.ManyToManyField(Group) 
    name = models.CharField(max_length=30) 
+1

'그룹'및 '항목'개체 란 무엇입니까? –

+0

그룹 및 항목은 어떻게 제휴됩니까? –

답변

0

을 나는 당신이 FK에서이 추측 :

{% extends "base.html" %} 

{% block content %} 

{% for group in group_list %} 
    {{ group.name }}<br /> 
{% endfor %} 

{% for item in item_list %} 
    {{ item.name }}<br /> 
{% endfor %} 

{% endblock %} 

UPDATE

모델 (죄송이 포함 깜빡) 그룹에 항목

class Item(models.Model): 
    group = models.ForeignKey(Group) 

전망 :

def manage(request): 
    group_list = Group.objects.order_by('name').filter(user=request.user) 
    return render(request, 'manage.html', {'group_list': group_list}) 

템플릿 :

{% extends "base.html" %} 

{% block content %} 

{% for group in group_list %} 
    {{ group.name }}<br /> 

    <p>Item for this group</p> 
    {% for item in group.item_set.all %} 
     {{item.name}} 
    {% endfor %} 
{% endfor %} 

{%의 엔드 블록 %}

1

귀하의 접근 방식은 불필요한 추가 데이터베이스 안타를 수행합니다. 성능상의 이유로이 같은 관련 단체와 단지 항목을 선택해야합니다

def manage(request): 
    item_list = Item.objects.order_by(
       'group__name', 'name').filter(
       user=request.user).select_related('group') 
    return render(request, 'manage.html', {'item_list': item_list}) 

을 템플릿은 다음과 같습니다

{% extends "base.html" %} 
{% block content %} 
{% for item in item_list %} 
    {% ifchanged item.group.name %} 
    {{ item.group.name }}<br /> 
    {% endifchanged %} 
    {{ item.name }}<br /> 
{% endfor %} 
{% endblock %} 

당신이 하나의 데이터베이스에 관계없이 얼마나 많은 그룹이있다의 공격 한 그 방법 .