Почему мой "список_друзей" остается пустым, когда срабатывает мой сигнал Django?
Я использую сигнал Django post_save
для изменения содержимого базы данных Budget
. В моем ответе я получаю friendsList
, заполненный идентификаторами пользователей, но когда я использую сигналы 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]
}
Мне нужны решения, с помощью которых мои friends_list
должны инициализироваться [2, 3]
.
Спасибо.
Я пробовал использовать friends_list = instance.friendsList.all()
, но instance.friendsList.all()
остается пустым.
Так что я решил свою проблему, воспользовавшись подсказкой @Lax_Sam. Использовал действия m2m_changed
и post_add
.
Код сигнала:
@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)
@receiver(m2m_changed, sender=SplitPayBudget.friendsList.through)
def update_budget_for_splitpay(sender, instance, action, **kwargs):
if action == 'post_add':
for friend in instance.friendsList.all():
Budget.objects.filter(user=friend.user).update(budgetofUser=F('budgetofUser') - instance.amount)