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:
| Campo | Tipo | Comportamiento |
|---|---|---|
name | CharField(255) | Nombre visible del tenant |
address | TextField(blank) | Dirección postal |
created_at / updated_at | DateTimeField | auto_now_add / auto_now |
is_active | BooleanField(default=True) | Si la organización está operativa |
max_racks | IntegerField(default=10) | Límite de racks según plan |
plan | FK(Plan, SET_NULL, null) | Plan de suscripción vinculado |
extra_modules | M2M(SaaSModule, blank) | Módulos à la carte adicionales al plan |
disable_reason | CharField(300, blank) | Razón mostrada en pausa |
deleted_at | DateTimeField(null) | Soft-delete: su presencia indica borrado lógico |
logo_path | CharField(255, blank) | Ruta al logotipo |
session_timeout_minutes | IntegerField(default=10) | Tiempo de inactividad para cerrar sesión |
onboarding_completed | BooleanField(default=False) | Wizard de alta completado |
sentinel_config | JSONField(default=dict) | Configuración del módulo Sentinel |
backup_retention_days | IntegerField(default=0) | Retención de backups; 0 delega al plan (Starter 7d, Pro 30d) |
Métodos públicos:
is_deleted(@property) —Truesideleted_atno esNone(soft-delete).get_active_modules()— devuelvesetde slugs de módulos accesibles: siempre losSaaSModule.is_core=Truemás los registrados enextra_modules.
Meta: no hay clase Meta declarada. Usa valores por defecto de Django.
Dependencias entrantes
| Archivo | Referencia |
|---|---|
core/models.py:120 | User.organization FK (CASCADE) |
core/models.py:170 | SystemLog.organization FK (CASCADE) |
core/models.py:303 | StoredCredential.organization FK (CASCADE) |
racks/models.py | BoxCategory, RackGroup, Stencil, Rack FK a Organization |
racks/services/racks.py | RackService recibe Organization en cada método |
blueprints/models.py | Blueprint, AIPrompt FK a Organization |
monitoring/models.py:52 | MonitoringTarget, MonitoringAlert FK |
monitoring/models_itsm.py | SLAPolicy, NotificationChannel, EscalationPolicy, Runbook, etc. |
monitoring/tasks.py:34 | Huey itera Organization.objects.all() |
network/models.py:206,240,603 | DeviceDiscovery, VendorDeviceProfile, PortConnection |
signage/models.py (8 FKs) | Múltiples modelos de signage |
core/admin.py:75 | OrganizationAdmin registrado |
Dependencias salientes
core.models.Plan— FK, define los módulos base.core.models.SaaSModule— M2M víaextra_modules.django.db.models— ORM base.
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()
Related
entity--core--model--plan— plan de suscripción vinculado.entity--core--model--saasmodule— módulos SaaS asignables.entity--core--model--user— usuarios del tenant.entity--core--model--systemlog— logs scoped por tenant.entity--core--model--storedcredential— credenciales del tenant.entity--racks--model--rack— racks aislados por organización.entity--blueprints--model--blueprint— blueprints aislados.concept--saas--multi-tenancy— patrón arquitectónico.
Véase también
- [[entity—core—model—user]]
- [[entity—core—model—plan]]
- [[entity—core—model—saasmodule]]
- [[entity—core—model—systemlog]]
- [[entity—core—model—storedcredential]]
- [[entity—racks—model—rack]]
- [[entity—blueprints—model—blueprint]]
- [[concept—saas—multi-tenancy]]