2

私の 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})

テンプレート:

{% extends "base.html" %}

{% block content %}

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

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

{% endblock %}

アップデート

モデル (これを含めるのを忘れて申し訳ありません):

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)
4

2 に答える 2

3

あなたのアプローチは、不要な追加のデータベース ヒットを行います。パフォーマンス上の理由から、次のような関連グループを持つアイテムのみを選択する必要があります。

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 %}

そうすれば、グループの数に関係なく、ヒットするデータベースは 1 つだけになります。

于 2013-04-26T08:22:06.307 に答える
0

アイテムからグループへのfkがあると思います

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 %}

{% エンドブロック %}

于 2013-04-26T08:05:17.280 に答える