Bonjour à tous,

J'ai une question concernant l'exécution d'une fonction au chargmenet d'un "objects.get" ou d'un "objects.filter".
Je m'explique. Je m'amuse à développer une petite application web avec django.

Pour faire simple, j'ai une classe compte décrite comme ci-dessous dans mon models.py avec une fonction qui permet de calcul le solde du compte à partir des opérations saisies (une autre classe)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Compte(models.Model):
    libelle = models.CharField(max_length=200,blank=True)
    ....
    onArchive = models.BooleanField(default=False,blank=True)
    soldes = {}
 
    def __str__(self) -> str:
        return self.libelle
 
    def fn_get_soldes(self):
        # on va récupérer les soldes depuis les opérations associées
        OperationsDebit = Operation.objects.filter(typeOperation='D',compte_id=self.pk).aggregate(Sum('montant'))
        if OperationsDebit['montant__sum'] == None:
            OperationsDebit['montant__sum'] = 0.00
        OperationsCredit = Operation.objects.filter(typeOperation='C',compte_id=self.pk).aggregate(Sum('montant'))
        if OperationsCredit['montant__sum'] == None:
            OperationsCredit['montant__sum'] = 0.00
 
        self.soldes = {
            "soldeInitial" : self.soldeInitial,
            "soldePointe" : OperationsCredit['montant__sum'] - OperationsDebit['montant__sum'] + self.soldeInitial,
        }
Dans mon fichier views.py, si je veux afficher le détails d'un compte sur ma page, j'ai ce code suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
def compte_details(request,id):
    compte = Compte.objects.get(pk=id)
    compte.fn_get_soldes()
Ca fonctionne très bien. Mais la ou ça ne me plait pas, c'est que je veux faire une page avec tous les comptes. Mais la, ça marche plus car je ne peux utiliser ma fonction sur une liste d'objets
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
def comptes(request):
    comptes = Compte.objects.filter(onArchive=False)
Je pourrais m'en sortir en bouclant sur la liste d'objets et pour chaque compte le mettre à jour. Ca fonctionnerait également. Mais je voudrais savoir s'il est possible d'exécuter cette fonction fn_get_soldes au moment ou l'objet est peuplé depuis la base?

J'espère être assez claire et désolé si je n'utilise pas les bons termes...

En vous remerciant pour votre aide