Я пытаюсь добавить все значения 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
не обновляются!
Вы импортировали функцию 'signals.py' в' ready() 'в свой AppConfig, как предложено в разделе« Где должен находиться этот код? ». в документах https://docs.djangoproject.com/en/1.9/topics/signals/#connecting-receiver-functions? – Nikita
@ Никита Я этого не делал. Я прочитал главу сигналов в документации, но мне это не очень понятно. Можете ли вы помочь в этом отношении? – MiniGunnR
@Nikita Ok Я получил это, чтобы работать с копированием кодов из другого блога, но я понятия не имею, как это работает! Можете ли вы предложить мне легкий материал для чтения? – MiniGunnR