我有这两个模型:
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()
答案 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 %}