我正在试图弄清楚如何解决这个问题
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 %}
这似乎很容易,但我还没有实现。
如果有人给我一些胶水,请帮助我。
提前致谢。
答案 0 :(得分:2)
如果您使用的是django 1.3+,请使用aggregation
from django.db.models import Count
queryset = List.objects.annotate(item_count=Count('item'))
此查询集中的每个List实例都有一个item_count属性,您可以在模板中显示该属性。你会在文档中找到更多的例子。
答案 1 :(得分:0)
我想要的方式,轻松的方法是在类Items上创建一个方法。
def get_num_item(self):
return Lista.objects.filter(item__id = self.id).count()
我很惭愧。
谢谢,谢夫!