我試圖在Transaction
模型中添加所有total
值,並將它們放在Sale
模型的第一個實例(pk=1
)gross_total
字段中。這是我的代碼。如何根據使用信號更新另一個模型的字段來更新模型字段?
models.py
class Sale(models.Model):
gross_total = models.FloatField()
def __unicode__(self):
return str(self.gross_total)
class Transaction(models.Model):
sale = models.ForeignKey('Sale')
price = models.FloatField()
quantity = models.IntegerField()
total = models.FloatField(blank=True, null=True)
def save(self):
self.total = self.price * self.quantity
return super(Transaction, self).save()
def __unicode__(self):
return str(self.total)
signals.py
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.db.models import Sum
from .models import Transaction, Sale
@receiver(post_save, sender=Transaction)
def update_sale(sender, **kwargs):
sale = Sale.objects.get(pk=1)
sale.gross_total = Transaction.objects.all().aggregate(Sum('total'))['total__sum']
sale.save()
我是新來使用Django的信號。我做錯了什麼?如果我保存Transaction
模型的實例,則Sale
模型數據不會更新!
您是否導入了'signals.py'在'就緒()'函數在你的AppConfig中建議「這個代碼應該在哪裏住?」框中的文檔https://docs.djangoproject.com/en/1.9/topics/signals/#connecting-receiver-functions? – Nikita
@Nikita我沒有那樣做。我已閱讀文檔中的信號章節,但對我來說不是很清楚。你能幫助這方面嗎? – MiniGunnR
@Nikita好吧,我得到這個工作複製來自另一個博客的代碼,但我不知道它是如何工作的!你能給我一個簡單的閱讀材料嗎? – MiniGunnR