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

这样,无论有多少组,您都只有一个数据库命中。

于 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 回答