from django.db.models.signals import post_save, post_delete from django.dispatch import receiver from channels.layers import get_channel_layer from asgiref.sync import async_to_sync from django.template.loader import render_to_string from .models import Expense @receiver(post_save, sender=Expense) def expense_saved(sender, instance, created, **kwargs): channel_layer = get_channel_layer() # Renderizamos la fila parcial html = render_to_string('expenses/partials/expense_row.html', {'expense': instance}) # Envolvemos el HTML con las directivas OOB (Out-of-Band) de HTMX if created: # Si es nuevo, lo insertamos al principio del tbody con id "expenses-tbody" payload = f'
{html}' else: # Si ya existe, HTMX reemplazará automáticamente el tr con el mismo ID si usamos hx-swap-oob="true" payload = html.replace('