在列表视图中计算记录

时间:2010-06-14 07:39:40

标签: django count

我有这两个模型:

class CommonVehicle(models.Model):
   year = models.ForeignKey(Year)
   series = models.ForeignKey(Series)
   engine = models.ForeignKey(Engine)
   body_style = models.ForeignKey(BodyStyle)
   ...

class Vehicle(models.Model):    
   objects = VehicleManager()
   stock_number = models.CharField(max_length=6, blank=False)
   vin = models.CharField(max_length=17, blank=False)
   common_vehicle = models.ForeignKey(CommonVehicle)
   ....

我想要做的是计算在CommonVehicle类中使用给定Vehicle对象的次数。到目前为止,我的尝试给了我一个号码,这是所有记录的总和。如何将计数作为每个CommonVehicle

的总计出现次数

更新1 我认为这样的事情可行:

related_count = 0
for vehicle in vehicles:
    related_count += Vehicle.objects.filter(common_vehicle=vehicle).count()

3 个答案:

答案 0 :(得分:2)

somecommonvehicle.vehicle_set.count()

答案 1 :(得分:0)

我目前正在开发一款django应用程序,其目的是解决此类问题:

https://code.google.com/p/django-cube/

文档不是最新的,因为我不断修改代码(现在......它只是项目的开始)。以下是您将使用的代码:

cube = Cube(['common_vehicle'], Vehicle.objects.all(), len)

您可以迭代多维数据集以获取所有可能的CommonVehicle s的所有计数:

for coords, value in cube.iteritems():
    #will print <CommonVehicule unicode representation> <count for this common vehicule>
    print coords.common_vehicule, measure

或直接获取CommonVehicule的计数:

cube[Coords(common_vehicle=a_common_veh)]

许多其他很酷的功能(将会)......

PS :该应用允许在django查询集上创建多维聚合,OLAP样式... Cube(['common_vehicle'], Vehicle.objects.all(), len)实际上代表一个维度为['common_vehicle']的多维数据集,基本查询集是Vehicle.objects.all(),聚合函数是len

答案 2 :(得分:0)

发现问题与:this

密切相关

我应该这样做:

vehicles = CommonVehicle.objects.annotate(related_count=Count('vehicle')).all()

然后在计数出现的模板上:

{% for vehicle in vehicles %}
   ...
   {{ vehicle.related_count }}
   ...
{% endfor %}