【发布时间】:2016-01-31 06:02:35
【问题描述】:
我正在尝试将所有 total 值添加到 Transaction 模型中,并将它们放入 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 模型数据不会更新!
【问题讨论】:
-
您是否按照“这段代码应该放在哪里?”文档中的框docs.djangoproject.com/en/1.9/topics/signals/… ?
-
@Nikita 我没有那样做。我已经阅读了文档中的信号章节,但对我来说不是很清楚。你能在这方面提供帮助吗?
-
@Nikita 好的,我可以从另一个博客复制代码,但我不知道它是如何工作的!你能给我推荐一个简单的阅读材料吗?
-
不幸的是,我对易读材料一无所知,我同意 Django 文档的部分内容从清晰的解释到“我在读什么”:)。但是我试图在其他答案中解释一些。