我试图计算表格中不同产品名称的出现次数。我希望结果是这样的:
Laptop 10
Mice 15
等等,但我得到了:
2 10
1 15
任何想法可能出错?
这是我的 models.py :
class ProductNoSerial(models.Model):
name = models.CharField(max_length=100)
category = models.ForeignKey(Category)
def __str__(self):
return self.name
class ProductNoSerialInstance(models.Model):
STATUS_CHOICES = (
('in_inventory', 'In Stock'),
('given_out', 'Given Out'),
('repair', 'Repair')
)
name = models.ForeignKey(ProductNoSerial)
owner = models.ForeignKey(Employee, blank=True, null=True)
it_dep = models.ForeignKey(ItDep)
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='draft')
def __unicode__(self):
return self.name
这是我的 view.py :
def InventoryList(request):
count_query = ProductNoSerialInstance.objects.values('name').annotate(count=models.Count('name'))
context = { 'inventory_list': count_query }
return render(request, 'inventory_list.html', context)
最后我的 inventory_list.html :
<p><b>List of inventory<b></p>
<table>
{% for item in inventory_list %}
<tr>
<td> {{ item.name }} </td>
<td> {{ item.count }} </td>
</tr>
{% endfor %}
</table>
我已经尝试了these suggestions,但没有运气。什么想法可能是错的?我认为这个问题可能是因为name
是 ForeignKey 这个事实?
答案 0 :(得分:2)
这里有一个微妙的乍一看并不是很明显,因为ProductNoSerialInstance
模型有一个名为name
的字段,实际上是一个外键。再加上你得到values
的事实,这就是结果。 values
返回字典而不是对象实例,因此{{ item.name.name }}
不幸无法正常工作。您需要对查询稍作修改
ProductNoSerialInstance.objects.values('name__name').annotate(count=models.Count('name'))