J'ai 2 modèles: transaction et portefeuille, un portefeuille a plusieurs transactions.
Je dois mettre à jour le champ code> code> dans Cela crée une nouvelle transaction correctement mais non mise à jour du modèle de portefeuille. Comment je peux résoudre ce problème? P> P> mannequin code> 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
3 Réponses :
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()
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.
Vous devez instancier le portefeuille, puis effectuer l'addition ou la soustraction appropriée dessus. P>
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.) P>
Avez-vous vérifié que vos déclarations conditionnelles sont déclenchées?
Cela devrait réellement fonctionner sans que vous ayez à appeler auto.wallet.Save () si
Vous avez déjà passé un objet de portefeuille valide à la transaction. p>
Ouais, comme tu as dit que mon état n'a pas eu de gâchette. Vous êtes ma vie de vie. Merci beaucoup
J'ai eu un autre problème. Savez-vous de ne pas créer de nouvelle transaction si la quantité de transaction supérieure à la quantité de portefeuille et renvoie un message d'erreur pour l'utilisateur?
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