我正在使用Django post_save
信号修改Budget
的数据库内容,在响应中我得到了friendsList
,其中填充了用户ID,但是当我使用post_save信号查询并将其存储到friends_list
中时,我发现列表仍然是空的。
我的回应:
{
"id": 5,
"amount": 100,
"budgetForSplitPay": 1,
"friendsList": [
2,
3
]
}
我的post_save信号码:
@receiver(post_save, sender=SplitPayBudget)
def post_save_splitpay_amount(sender, instance, created, **kwargs):
Budget.objects.filter(user=instance.budgetForSplitPay.user).update(budgetofUser=F('budgetofUser') - instance.amount)
friends_list = instance.friendsList.all()
for friend in friends_list:
Budget.objects.filter(user=friend.user).update(budgetofUser=F('budgetofUser') - instance.amount)
我的模特:
class SplitPayBudget(models.Model):
budgetForSplitPay = models.ForeignKey(Budget, on_delete=models.CASCADE, related_name='budgetForSplitPay')
friendsList = models.ManyToManyField(Budget, related_name='friendsList', blank=True)
amount = models.IntegerField(default=0)
def __str__(self):
return str(self.budgetForSplitPay.user)
触发此信号的API调用主体:
{
"budgetForSplitPay": "1",
"amount": 100,
"friendsList": [2, 3]
}
我的序列化程序:
class SplitPayBudgetSerializer(ModelSerializer): # Actually a TransactionSerializer
class Meta:
model = SplitPayBudget
fields = '__all__'
我想要一个解决方案,我的friends_list
应该用[2, 3]
初始化。
谢谢你。
我尝试使用friends_list = instance.friendsList.all()
,但instance.friendsList.all()
仍然是空的。
1条答案
按热度按时间jtjikinw1#
所以我接受了@Lax_Sam的提示,使用了
m2m_changed
和post_add
操作来解决我的问题。信号代码: