Почему мой "список_друзей" остается пустым, когда срабатывает мой сигнал 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)
Вернуться на верх