当进行新投资时,我使用信号来更新配置文件表中的字段。
在 update_users_investments 函数中使用了许多打印语句后,我可以看到该函数正在被调用并且正在执行正确的计算。
但是,它没有保存到数据库,也没有错误。
你能明白为什么它不保存吗?还有更好的方法来调试 save 方法吗?我环顾四周,看不到任何东西,不知道为什么它没有保存,这非常令人沮丧。
在我的代码的其他地方,我使用类似的信号保存到看起来工作正常的其他表。
信号
@receiver(post_save, sender=Investment)
def update_users_investments(sender, instance, created, **kwargs):
user = Profile.objects.get(user=instance.user.user)
total_investments = user.total_invested
investment = instance.transaction_type * instance.price * instance.number_shares
user.total_invested = total_investments + investment
user.save()
Run Code Online (Sandbox Code Playgroud)
要保存的模型:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
total_invested = models.DecimalField(max_digits=5, decimal_places=2)
cash_avaliable = models.DecimalField(max_digits=5, decimal_places=2,
null=True)
Run Code Online (Sandbox Code Playgroud)
投资模型(信号的来源):
class Investment(models.Model):
"""Model representing each investment made by users"""
user = models.ForeignKey(Profile, on_delete=models.DO_NOTHING)
team_code = models.ForeignKey(Team,
on_delete=models.DO_NOTHING)
transaction_type = models.IntegerField(choices=((-1, "Sell"), (1, "Buy")),
help_text="Show whether …Run Code Online (Sandbox Code Playgroud)