Volver a la wiki

Organization · Modelo core

Organization · Modelo core

Propósito

Organization es el tenant SaaS raíz del sistema. Todos los Racks, Blueprints, recursos de red, credenciales y usuarios pertenecen a una Organization, que actúa como barrera de aislamiento entre clientes.

Contrato

Campos:

CampoTipoComportamiento
nameCharField(255)Nombre visible del tenant
addressTextField(blank)Dirección postal
created_at / updated_atDateTimeFieldauto_now_add / auto_now
is_activeBooleanField(default=True)Si la organización está operativa
max_racksIntegerField(default=10)Límite de racks según plan
planFK(Plan, SET_NULL, null)Plan de suscripción vinculado
extra_modulesM2M(SaaSModule, blank)Módulos à la carte adicionales al plan
disable_reasonCharField(300, blank)Razón mostrada en pausa
deleted_atDateTimeField(null)Soft-delete: su presencia indica borrado lógico
logo_pathCharField(255, blank)Ruta al logotipo
session_timeout_minutesIntegerField(default=10)Tiempo de inactividad para cerrar sesión
onboarding_completedBooleanField(default=False)Wizard de alta completado
sentinel_configJSONField(default=dict)Configuración del módulo Sentinel
backup_retention_daysIntegerField(default=0)Retención de backups; 0 delega al plan (Starter 7d, Pro 30d)

Métodos públicos:

Meta: no hay clase Meta declarada. Usa valores por defecto de Django.

Dependencias entrantes

ArchivoReferencia
core/models.py:120User.organization FK (CASCADE)
core/models.py:170SystemLog.organization FK (CASCADE)
core/models.py:303StoredCredential.organization FK (CASCADE)
racks/models.pyBoxCategory, RackGroup, Stencil, Rack FK a Organization
racks/services/racks.pyRackService recibe Organization en cada método
blueprints/models.pyBlueprint, AIPrompt FK a Organization
monitoring/models.py:52MonitoringTarget, MonitoringAlert FK
monitoring/models_itsm.pySLAPolicy, NotificationChannel, EscalationPolicy, Runbook, etc.
monitoring/tasks.py:34Huey itera Organization.objects.all()
network/models.py:206,240,603DeviceDiscovery, VendorDeviceProfile, PortConnection
signage/models.py (8 FKs)Múltiples modelos de signage
core/admin.py:75OrganizationAdmin registrado

Dependencias salientes

Sin manager personalizado, sin signals declarados en el archivo.

Ejemplos

# Resolver módulos activos (core/models.py)
org = Organization.objects.get(pk=tenant_id)
active_slugs = org.get_active_modules()
# → {'core', 'racks', 'blueprints', ...}

# Soft-delete
org.deleted_at = timezone.now()
org.save()
assert org.is_deleted is True

# Resolución de tenant en vistas (racks/views.py:27)
org = request.user.organization or Organization.objects.first()

Véase también

Subir