2010-06-14 3 views
0

J'ai ces deux modèles:Count enregistrements dans Liste Voir

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) 
    .... 

Ce que je veux faire est d'avoir un compte de combien de fois un objet CommonVehicle donné est utilisé dans la classe Vehicle. Jusqu'à présent mes tentatives me donnent un numéro, qui est un total de tous les enregistrements. Comment puis-je avoir le compte étant les comparutions au total pour chaque CommonVehicle

Update 1 Je pensais quelque chose comme ça pourrait fonctionner:

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

Quelles tentatives ? –

+0

@Ignacio: J'ai un peu mis à jour ma question – Stephen

Répondre

0

Constaté que la question est étroitement liée à: this

je devrais faire ceci:

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

ensuite au modèle où le nombre comparaîtra:

{% for vehicle in vehicles %} 
    ... 
    {{ vehicle.related_count }} 
    ... 
{% endfor %} 
2
somecommonvehicle.vehicle_set.count() 
+0

Cela ne veut pas dire grand-chose, mais cette réponse est un peu vague – Stephen

+0

Prenez l'objet "commonVehicle' donné" que vous avez, accédez à l'attribut 'vehicle_set' , et appelez la méthode 'count()' dessus. –

0

Je développe actuellement une application django dont le but est de résoudre ce genre de problème:

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

La documentation n'est pas à jour, car je modifie constamment le code (pour l'instant ... Ce n'est que le début du projet). Voici le code que vous utilisez:

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

Le vous pouvez itérer sur le cube pour avoir toutes les comptes pour tous les possibles CommonVehicle s:

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

Ou directement obtenir le nombre de CommonVehicule:

cube[Coords(common_vehicle=a_common_veh)] 

beaucoup d'autres fonctionnalités sont (seront) disponibles ...

PS: l'application permet de créer des agrégats multidimensionnels sur une queryset django, style OLAP ... Cube(['common_vehicle'], Vehicle.objects.all(), len) représente en fait un cube dont les dimensions sont ['common_vehicle'], queryset de base est Vehicle.objects.all() et la fonction d'agrégation est len.

+0

Cela semble intéressant ..... Je vais essayer aussi et voir ... j'espère que vous finirez bientôt :) – Stephen

+0

Ouais! Je le pousse activement, il devrait donc être plus stable et plus documenté dans les prochains jours ... Et la syntaxe devrait être meilleure. – sebpiq