Sto costruendo un progetto personale con Django, per allenarmi (perché amo Django, ma mi mancano le abilità). Ho i requisiti di base, conosco Python, ho letto attentamente il libro di Django due volte se non tre volte.ForeignKey alla classe astratta (relazioni generiche)
Il mio obiettivo è creare un semplice servizio di monitoraggio, con un'interfaccia web basata su Django che mi consenta di controllare lo stato dei miei "nodi" (server). Ogni nodo ha più "servizi". L'applicazione controlla la disponibilità di ciascun servizio per ciascun nodo.
Il mio problema è che non ho idea di come rappresentare diversi tipi di servizi nel mio database. Ho pensato a due "soluzioni":
- singolo modello di servizio, con un campo "serviceType", e un gran casino con i campi. (Non ho una grande esperienza nella modellazione di database, ma questo sembra ... "cattivo" per me)
- più modelli di servizio. Mi piace questa soluzione, ma poi non ho idea di come posso fare riferimento a questi servizi DIFFERENT nello stesso campo.
Questo è un breve estratto dal mio models.py file: (ho tolto tutto ciò che non è legato a questo 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)
Naturalmente, la linea con il ManyToManyField è fasullo. Non ho idea di cosa mettere al posto di "* Servizio". Ho cercato sinceramente soluzioni a questo proposito, ho sentito parlare di "relazioni generiche", tabelle triple-join, ma non ho davvero capito queste cose.
Inoltre, l'inglese non è la mia lingua madre, in modo da venire a struttura del database e la semantica, la mia conoscenza e la comprensione di ciò che ho letto è limitato (ma questo è il mio problema)
Grazie per il dettaglio, pieno di codice, risposta. Con quello di @Joe J, sono abbastanza sicuro che mi aiuterà durante la modellazione della mia applicazione. Questo sito è fantastico, anche i suoi utenti :) – pistache
OK, questa è stata un'ottima soluzione che hai fornito qui, in particolare il trucco InheritanceManager e l'intero pacchetto django-model-utils. Grazie ancora – pistache