0

我试图弄清楚如何解决这个问题

class Item(models.Model):
    type = models.ForeignKey(Type)
    name = models.CharField(max_lenght = 10)
    ...

class List(models.Model):
    items = models.ManyToManyField(Item)
    ...

我想计算一个项目出现在另一个列表中的数量,并显示在模板上。

看法

def items_by_list(request, id_):
    list = List.objects.get(id = id_)
    qr = list.items.all()

    #NOT TESTED

    num = []
    i = 0
    for item in qr:
        num[i] = List.objects.filter(items__id = item__id ).count()

    #FINISH NOT TESTED

    c = {}
    c.update(csrf(request))
    c = {'request':request, 'list' : qr, 'num' : num}
    return render_to_response('items_by_list.html', c, context_instance=RequestContext(request))

模板

    {% for dia in list %}   
            <div class="span4" >
                <div>
                    <h6 style="color: #9937d8">{{item.type.description}}</h6>
                    <small style="color: #b2e300">{{ item.name }}</small>
                    <small style="color: #b2e300">{{COUNT HOW MANY TIMES THE ITEM APPEAR ON OTHER LISTS}}</small>

                </div>  
    {% endfor %}

这似乎很容易,但我还不能实现。

如果有人对我有胶水,请帮助我。

提前致谢。

4

2 回答 2

2

如果您使用的是 django 1.3+,请使用聚合

from django.db.models import Count    
queryset = List.objects.annotate(item_count=Count('item'))

此查询集中的每个 List 实例都有一个 item_count 属性,您可以在模板中显示该属性。您将在文档中找到更多示例。

于 2012-09-03T03:37:16.757 回答
0

我想做的方式,最简单的方法是在类 Items 上创建一个方法。

def get_num_item(self):
    return Lista.objects.filter(item__id = self.id).count()

我很惭愧。

谢谢,谢夫!

于 2012-09-03T13:39:27.280 回答