第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

根據(jù)其他模型 Django 的值更改模型的值

根據(jù)其他模型 Django 的值更改模型的值

子衿沉夜 2023-08-15 16:38:35
我有一個(gè)模型Wallet和StudentPayment. 每次我添加或更新 StudentPayment 時(shí),Wallet余額都應(yīng)根據(jù)添加或更新的情況而變化StudentPayment。class Wallet(models.Model):    ...    balance = models.DecimalField(decimal_places=2, max_digits=100, default=0.00)    ...class StudentPayment(models.Model):    ...    wallet = models.ForeignKey(                 Wallet,                  on_delete=models.SET_NULL,                  null=True, related_name='students_payment')    amount = models.DecimalField(decimal_places=2, max_digits=100)    ...例如:如果我添加1000金額的付款,錢包余額也應(yīng)該更改為1000,我知道該怎么做,但不知道如何處理更新,例如:如果我將付款金額更改為900,錢包余額也應(yīng)該發(fā)生變化。感謝任何幫助)我嘗試使用重寫 save() 方法來實(shí)現(xiàn),但沒有任何效果
查看完整描述

1 回答

?
幕布斯6054654

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊

信號(hào)應(yīng)該適合您在這里想要的。StudentPayment在某些操作(例如保存或刪除對(duì)象)后會(huì)觸發(fā)信號(hào),以便您可以在保存或刪除對(duì)象時(shí)執(zhí)行功能。


此時(shí),您可能希望余額Wallet是支付給該錢包的所有金額的總和。


? ? from django.db.models import Sum

? ? from django.db.models.signals import (

? ? ? ? post_delete,

? ? ? ? post_save,

? ? )

? ? from django.dispatch import receiver



? ? class Wallet(models.Model):

? ? ? ? ...

? ? ? ? balance = models.DecimalField(decimal_places=2, max_digits=100, default=0.00)

? ? ? ? ...

? ??


? ? class StudentPayment(models.Model):

? ? ? ? ...

? ? ? ? wallet = models.ForeignKey(

? ? ? ? ? ? ? ? ? ? ?Wallet,?

? ? ? ? ? ? ? ? ? ? ?on_delete=models.SET_NULL,?

? ? ? ? ? ? ? ? ? ? ?null=True, related_name='students_payment')

? ??

? ? ? ? amount = models.DecimalField(decimal_places=2, max_digits=100)

? ? ? ? ...



? ? @receiver([post_save, post_delete], sender=StudentPayment)

? ? def calculate_total_amount(instance, **kwargs):

? ? ?

? ? ? ? wallet = instance.wallet


? ? ? ? # Add together the amount of all `StudentPayment` objects for the wallet

? ? ? ? total = StudentPayment.objects.filter(wallet=wallet).aggregate(

? ? ? ? ? ? Sum('amount')

? ? ? ? )['amount__sum']


? ? ? ? wallet.balance = total

? ? ? ? wallet.save(update_fields=['balance'])


查看完整回答
反對(duì) 回復(fù) 2023-08-15
  • 1 回答
  • 0 關(guān)注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)