Je suis aux prises avec la conception d'une application django. Étant donné les modèles suivants:Afficher plusieurs modèles Django liés dans un problème de conception de table
class A(models.Model):
name = models.CharField(max_length=255)
class B(models.Model):
name = models.CharField(max_length=255)
a = models.ForeignKey(A)
class C(models.Model):
val = models.IntegerField()
b = models.ForeignKey(B)
Je voudrais une vue/modèle qui affiche un tableau HTML qui montre dans la première colonne tous les A objets, dans la deuxième colonne tous les objets B (regroupés par A) qui sont référencés à A et dans la dernière colonne une somme de tous les val de C objets qui sont référencés à chaque B. Tout cela avec une somme pour chaque objet A. L'exemple suivant montre ce que je cherche:
A1.name | B1.name [where FK to A1] | sum(C.val) [where FK to B1] A1.name | B2.name [where FK to A1] | sum(C.val) [where FK to B2] A1.name | Total | sum(C.val) [where FK to Bx (all B that have FK to A1] A2.name | B3.name [where FK to A2] | sum(C.val) [where FK to B3] A2.name | Total | sum(C.val) [where FK to Bx (all B that have FK to A2]
Quelqu'un peut-il me donner un conseil comment concevoir un tel problème (malheureusement, mon code se termine souvent dans tout un gâchis)?
Dois-je étendre les classes du modèle avec des méthodes appropriées? Faire une requête personnalisée pour l'ensemble des données de la table dans la vue? Juste obtenir tous les objets via les gestionnaires et faire la plupart des choses dans le modèle?
Merci pour chaque réponse.
Cordialement,
Luke.
Merci, cela semble beaucoup plus propre par rapport à ce que j'ai trouvé, mais cela ne fonctionnera qu'avec Django v1.1 et plus tard, correct? – Lukas
Oui, il est compatible avec le tronc actuel et les versions futures en raison de l'agrégation. Vous pouvez le remplacer par 'extra' select (sous-requête) ou calculer les montants' C.val' pour chaque 'B' en python –
Lukas, regardez ma réponse éditée –