from notifications.models import Notificacion# Get unread notifications for userunread = Notificacion.objects.filter( usuario=request.user, leida=False).order_by('-fecha')# Get all notificationsall_notifications = Notificacion.objects.filter( usuario=request.user).order_by('-fecha')# Count unreadunread_count = Notificacion.objects.filter( usuario=request.user, leida=False).count()
# Mark single notification as readnotification = Notificacion.objects.get(id=notification_id)notification.leida = Truenotification.save()# Mark all as read for userNotificacion.objects.filter( usuario=request.user, leida=False).update(leida=True)# Mark specific notifications as readnotification_ids = [1, 2, 3]Notificacion.objects.filter( id__in=notification_ids, usuario=request.user).update(leida=True)
The notifications app provides a helper function for sending notifications:
notifications/utils.py
from notifications.models import Notificacionfrom channels.layers import get_channel_layerfrom asgiref.sync import async_to_syncdef notificar_usuario(usuario, mensaje): """ Send notification to user via database and WebSocket Args: usuario: User instance mensaje: Notification message string """ # Save to database notificacion = Notificacion.objects.create( usuario=usuario, mensaje=mensaje ) # Send via WebSocket channel_layer = get_channel_layer() async_to_sync(channel_layer.group_send)( f'user_{usuario.id}', { 'type': 'notificacion_mensaje', 'message': mensaje } ) return notificacion
Usage:
from notifications.utils import notificar_usuariofrom django.contrib.auth.models import Useruser = User.objects.get(username='maria')notificar_usuario(user, 'Tu pedido ha sido confirmado')
from notifications.utils import notificar_usuariofrom tables.models import Pedidopedido = Pedido.objects.get(id=pedido_id)# Notify all users associated with the orderfor user in pedido.usuarios.all(): notificar_usuario( user, f'Pedido #{pedido.id} actualizado a estado: {pedido.get_estado_display()}' )
Notifications are delivered in real-time via WebSocket. See the Notifications Documentation for complete WebSocket setup and frontend integration.WebSocket URL:
# Use select_related for user infonotifications = Notificacion.objects.filter( leida=False).select_related('usuario').order_by('-fecha')# Pagination for large result setsfrom django.core.paginator import Paginatorall_notifications = Notificacion.objects.filter( usuario=request.user).order_by('-fecha')paginator = Paginator(all_notifications, 20) # 20 per pagepage = paginator.get_page(page_number)