Estoy construyendo un proyecto personal con Django, para entrenarme a mí mismo (porque amo a Django, pero echo de menos las habilidades). Tengo los requisitos básicos, conozco a Python, leo detenidamente el libro de Django dos o tres veces.ForeignKey a la clase abstracta (relaciones genéricas)
Mi objetivo es crear un servicio de supervisión simple, con una interfaz web basada en Django que me permita verificar el estado de mis "nodos" (servidores). Cada nodo tiene múltiples "servicios". La aplicación verifica la disponibilidad de cada servicio para cada nodo.
Mi problema es que no tengo idea de cómo representar diferentes tipos de servicios en mi base de datos. Pensé en dos "soluciones":
- sola modelo de servicio, con un campo "tipoServicio", y un gran lío con los campos. (No tengo una gran experiencia en el modelado de bases de datos, pero esto se ve ... "malo" para mí)
- múltiples modelos de servicio. Me gusta esta solución, pero no tengo idea de cómo puedo hacer referencia a estos DIFERENTES servicios en el mismo campo.
Este es un breve extracto de mi models.py archivo: (He quitado todo lo que no esté relacionada con este problema)
from django.db import models
# Create your models here.
class service(models.Model):
port = models.PositiveIntegerField()
class Meta:
abstract = True
class sshService(service):
username = models.CharField(max_length=64)
pkey = models.TextField()
class telnetService(service):
username = models.CharField(max_length=64)
password = models.CharField(max_length=64)
class genericTcpService(service):
pass
class genericUdpService(service):
pass
class node(models.Model):
name = models.CharField(max_length=64)
# various fields
services = models.ManyToManyField(service)
Por supuesto, la línea con el ManyToManyField es falso. No tengo idea de qué poner en lugar de "* Servicio". Honestamente busqué soluciones sobre esto, escuché sobre "relaciones genéricas", tablas de triple unión, pero realmente no entendía estas cosas.
Por otra parte, el Inglés no es mi lengua materna, por lo que viene a la estructura de base de datos y la semántica, mi conocimiento y comprensión de lo que he leído es limitado (pero eso es mi problema)
Gracias por el detallado, lleno de código, respuesta. Con el de @Joe J, estoy bastante seguro de que me ayudará a lo largo del modelado de mi aplicación. Este sitio es excelente, sus usuarios también :) – pistache
OK, esa fue una gran solución que dio aquí, especialmente el truco de InheritanceManager, y todo el paquete django-model-utils. Gracias de nuevo – pistache