每次使用信号更改外键时,我都想更新相关模型,类似于m2m_changed
,但对于外键。
用户模型:]
class User(AbstractUser):
balance = models.FloatField(default=0)
交易模型:]
class Transaction(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='transactions')
order = models.OneToOneField('Payment.Order', on_delete=models.CASCADE, related_name='transaction')
transaction_type = models.CharField(choices=[
('transfer', 'Transfer'),
('received', 'Received'),
], max_length=20, default='transfer')
created = models.DateTimeField(auto_now_add=True)
我需要在用户下创建新交易时,将其收集到余额中。
信号码:] >>
@receiver(pre_save, sender=User) def collect_transaction(sender, instance, **kwargs): balance = instance.transactions.aggregate(Sum('order__price')) print(balance)
但是它仅当我从用户模型而不是事务更新时才起作用。
例如,此代码将使信号起作用:
user.transactions.add(transaction) user.save()
而此代码将无法使信号正常工作:
Transaction.objects.create(user=1, order=1, transaction_type='received')
我想每次使用信号更改外键时都更新相关模型,类似于m2m_changed,但是对于外键。用户模型:类User(AbstractUser):余额=模型。...
仅当保存了User
模型时,才会发送您的信号。似乎您希望在保存任何Transaction
时将其发送,因此您应该尝试使用Transaction
作为发件人,而不是用户: