私はDjangoを使って個人的なプロジェクトを構築しています(私はDjangoが好きなので、スキルは不足しています)。私は基本的な要件を持っています、私はPythonを知っています、私は注意深くDjangoの本を3回ではなく2回読んでいます。抽象クラスへの外部キー(一般的な関係)
私の目標は、DjangoベースのWebインターフェイスを使用して簡単な監視サービスを作成して、自分の「ノード」(サーバー)の状態を確認できるようにすることです。各ノードには複数の「サービス」があります。アプリケーションは、各ノードの各サービスの可用性をチェックします。
私の問題は、私のデータベースにさまざまな種類のサービスをどのように表現するか分かりません。 「サービス種別」フィールドで、
- 単一サービスモデル、およびフィールドを持つ大きな混乱:私は2つの「解決策」を考えました。 (私はデータベースモデリングに大きな経験はありませんが、これは... "悪い"と思われます)
- サービスモデル。私はこの解決策が好きですが、どのように私がこれらを参照することができないのかわかりません。DIFFERENTサービスが同じフィールドにあります。
これは私の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の1つでは、私のアプリケーションのモデリングを通して私が助けてくれると確信しています。このサイトは素晴らしいですが、そのユーザーもあります。 – pistache
これはあなたがここで与えたすばらしい解決策です。特にInheritanceManagerのトリックと、django-model-utilsパッケージ全体です。再度、感謝します – pistache