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()
, и теперь все исправлено.