diff --git a/expenses_manager/expenses/migrations/0016_alter_transfer_expense_leg_alter_transfer_income_leg.py b/expenses_manager/expenses/migrations/0016_alter_transfer_expense_leg_alter_transfer_income_leg.py new file mode 100644 index 0000000..353a66f --- /dev/null +++ b/expenses_manager/expenses/migrations/0016_alter_transfer_expense_leg_alter_transfer_income_leg.py @@ -0,0 +1,24 @@ +# Generated by Django 5.2.10 on 2026-09-21 13:35 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('expenses', '0015_link_legacy_transfers'), + ] + + operations = [ + migrations.AlterField( + model_name='transfer', + name='expense_leg', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transfer_out', to='expenses.expense'), + ), + migrations.AlterField( + model_name='transfer', + name='income_leg', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transfer_in', to='expenses.income'), + ), + ] diff --git a/expenses_manager/expenses/models.py b/expenses_manager/expenses/models.py index 973d859..b6d763b 100644 --- a/expenses_manager/expenses/models.py +++ b/expenses_manager/expenses/models.py @@ -356,11 +356,23 @@ class Transfer(models.Model): # Las dos patas y la comisión opcional. SET_NULL para que si algo las borra # por fuera el Transfer no arrastre, pero el flujo normal las borra en cascada # desde el propio Transfer (ver delete()). + # + # blank=True porque un traspaso siempre acaba con sus dos patas, pero no las + # tiene en el instante en que se construye: sync() las crea a partir de él. + # Exigirlas en full_clean() describiría mal ese momento. expense_leg = models.OneToOneField( - Expense, on_delete=models.SET_NULL, null=True, related_name="transfer_out" + Expense, + on_delete=models.SET_NULL, + null=True, + blank=True, + related_name="transfer_out", ) income_leg = models.OneToOneField( - Income, on_delete=models.SET_NULL, null=True, related_name="transfer_in" + Income, + on_delete=models.SET_NULL, + null=True, + blank=True, + related_name="transfer_in", ) fee_amount = models.DecimalField(