ForeignKey к абстрактному классу (общие отношения)

Я создаю личный проект с Django, чтобы обучиться (потому что я люблю Django, но мне не хватает навыков). У меня есть основные требования, я знаю Python, я внимательно прочитал книгу Django дважды, если не трижды.

Моя цель - создать простой сервис мониторинга, с веб-интерфейсом на основе Django, позволяющим мне проверять состояние моих "узлов" (серверов). Каждый узел имеет несколько "сервисов". Приложение проверяет доступность каждого сервиса для каждого узла.

Моя проблема в том, что я понятия не имею, как представить различные типы сервисов в моей базе данных. Я думал о двух "решениях" :

  • единая модель сервиса, с полем "serviceType", и большой беспорядок с полями. (У меня нет большого опыта в моделировании баз данных, но это выглядит... "плохо" для меня)
  • несколько моделей сервисов. Мне нравится это решение, но тогда я не представляю, как я могу ссылаться на эти РАЗНЫЕ сервисы в одном поле.

Вот небольшой отрывок из моего 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 является ошибочной. Я понятия не имею, что поставить вместо "*Service". Я честно искал решения по этому поводу, слышал о "generic relations", triple-join таблицах, но не очень понимал эти вещи.

Более того, английский не является моим родным языком, поэтому, когда речь заходит о структуре и семантике баз данных, мои знания и понимание прочитанного ограничены (но это моя проблема)

15
задан juliomalegria 31 January 2012 в 18:43
поделиться