0
votes

Django: Comment mettre à jour un modèle associé lors de la création d'un autre modèle

J'ai 2 modèles: transaction et portefeuille, un portefeuille a plusieurs transactions. Je dois mettre à jour le champ dans mannequin chaque fois qu'une nouvelle transaction est créée. La façon dont je vois est écrase Enregistrer la méthode dans le modèle. Actuellement, j'ai écrit comme ceci xxx

Cela crée une nouvelle transaction correctement mais non mise à jour du modèle de portefeuille. Comment je peux résoudre ce problème?


3 commentaires

Dans quelle classe cette méthode est située dans?


Cette méthode Enregistrer est à l'intérieur du modèle de transaction ou du modèle de portefeuille?


Cette méthode de sauvegarde est à l'intérieur du modèle de transaction


3 Réponses :


1
votes

Vous ne devriez pas le faire car ces informations peuvent être consultées via des fonctions agrégées. Découvrez sur Django Documentation .

mais pour Une raison particulière dont vous avez besoin de le faire, vous devez le faire après l'enregistrement de la transaction, avec F Expression: P>

from django.db.models import F

def save(self, *args, **kwargs): 
    super(Transaction, self).save(*args, **kwargs)
    if self.kind == "Income":
        self.wallet.amount = F('amount') + self.amount
    elif self.kind == "Outcome":
        self.wallet.amount = F('amount') - self.amount
    self.wallet.save()


3 commentaires

Je viens d'essayer mais la quantité de portefeuille toujours la même qu'avant


Je viens de remarquer que vous devez utiliser un objet F pour de tels cas, j'ai mis à jour ma réponse.


Parce que ma condition n'a pas déclenché. Il devrait être self.kind.name === "Revenu". Merci beaucoup.



0
votes

Vous devez instancier le portefeuille, puis effectuer l'addition ou la soustraction appropriée dessus.

Je le ferais à l'intérieur d'une méthode de transaction, que vous appellerez sur Enregistrer ou tout autre endroit. et si des sauvegardes échouent, appuyez aussi la valeur du portefeuille.)


0 commentaires

0
votes