[外键更新时Django信号不会更新相关模型

问题描述 投票:2回答:1

每次使用信号更改外键时,我都想更新相关模型,类似于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):余额=模型。...

python django django-signals
1个回答
1
投票

仅当保存了User模型时,才会发送您的信号。似乎您希望在保存任何Transaction时将其发送,因此您应该尝试使用Transaction作为发件人,而不是用户:

© www.soinside.com 2019 - 2024. All rights reserved.