我正在用Django構建一個個人項目,以訓練自己(因爲我喜歡Django,但我錯過了技能)。我有基本要求,我知道Python,如果不是三次,我會仔細閱讀Django書籍兩次。ForeignKey到抽象類(通用關係)
我的目標是創建一個簡單的監控服務,使用基於Django的Web界面來檢查我的「節點」(服務器)的狀態。每個節點都有多個「服務」。應用程序檢查每個節點的每個服務的可用性。
我的問題是,我不知道如何在我的數據庫中表示不同類型的服務。我想到了兩個「解決方案」:
- 單服務模式,用「的serviceType」領域,並與領域的大混亂。 (我沒有很好的數據庫建模經驗,但是這看起來......對我來說「不好」)
- multiple服務模型。我喜歡這個解決方案,但後來我不知道如何在同一領域中引用這些不同服務。
這是從我的models.py文件很短的摘錄:(我刪除未與此問題相關的一切)
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)
當然,與ManyToManyField線是僞造的。我不知道應該用什麼來代替「*服務」。我誠實地尋找解決方案,我聽說過「通用關係」,三連接表,但我沒有真正理解這些東西。
此外,英語不是我的母語,所以來的數據庫結構和語義,我什麼我讀的認識和理解是有限的(但是這是我的問題)
感謝您的詳細,完整的代碼,答案。有了@Joe J之一,我很確定它會在整個應用程序的建模過程中幫助我。這個網站是偉大的,其用戶也:) – pistache
好的,這是一個很好的解決方案,特別是繼承管理器技巧,以及整個django-model-utils軟件包。再次感謝 – pistache