Django - запрос обновления не работает в сигнале pre_delete

Я попытался обновить кверисет Transaction модели в нижеприведенном pre_delete сигнале, который подключен к модели Wallet, но это не сработало.

Сигнал срабатывает, и все строки работают правильно, кроме последней строки :(

).
@receiver(pre_delete, sender=Wallet)
def delete_wallet(sender, instance, **kwargs):
    if instance.is_default:
        raise ValidationError({"is_default": "You can't delete the default wallet"})

    q = {"company": instance.company} if instance.company else {"user": instance.user}

    try:
        default_wallet = Wallet.objects.get(**q, is_default=True)
    except Wallet.DoesNotExist:
        default_wallet = Wallet.objects.filter(**q).exclude(pk=instance.pk).first()

    if not default_wallet:
        raise ValidationError({"is_default": "You can't delete the last wallet"})

    instance.transactions.all().update(wallet=default_wallet)

Возможно, он не может найти кошелек по умолчанию, поэтому он пытается получить первый, который является кошельком, который вы хотите удалить (потому что он находится до удаления, поэтому он все еще существует).

Попробуйте исключить pk=instance.pk в вашем default_wallet запросе.

Я перенес логику в функцию delete() модели Wallet вместо использования сигнала pre_delete(), и теперь все исправлено.

Вернуться на верх