Tôi đang xây dựng một dự án cá nhân với Django, để tự rèn luyện bản thân (vì tôi yêu Django, nhưng tôi nhớ kỹ năng). Tôi có các yêu cầu cơ bản, tôi biết Python, tôi cẩn thận đọc cuốn sách Django hai lần nếu không ba lần.ForeignKey đến lớp trừu tượng (quan hệ chung)
Mục tiêu của tôi là tạo một dịch vụ giám sát đơn giản, với giao diện web dựa trên Django cho phép tôi kiểm tra trạng thái của "nút" (máy chủ) của tôi. Mỗi nút có nhiều "dịch vụ". Ứng dụng kiểm tra tính khả dụng của từng dịch vụ cho mỗi nút.
Vấn đề của tôi là tôi không biết cách thể hiện các loại dịch vụ khác nhau trong cơ sở dữ liệu của mình. Tôi nghĩ đến hai "giải pháp":
- đơn mô hình dịch vụ, với một lĩnh vực "Loại Dịch vụ", và một mớ hỗn độn lớn với các lĩnh vực. (Tôi không có kinh nghiệm tuyệt vời trong mô hình hóa cơ sở dữ liệu, nhưng điều này có vẻ ... "xấu" với tôi)
- nhiều mô hình dịch vụ. Tôi thích giải pháp này, nhưng sau đó tôi không có ý tưởng làm thế nào tôi có thể tham khảo các dịch vụ KHÁC BIỆT trong cùng một lĩnh vực.
Đây là một đoạn trích ngắn từ models.py tập tin của tôi: (Tôi đã gỡ bỏ tất cả những gì không liên quan đến vấn đề này)
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)
Tất nhiên, phù hợp với ManyToManyField là không có thật. Tôi không có ý tưởng gì để thay thế cho "* Dịch vụ". Tôi thành thật tìm kiếm các giải pháp về điều này, tôi nghe nói về "quan hệ chung chung", ba bàn tham gia, nhưng tôi đã không thực sự hiểu những điều này.
Hơn nữa, tiếng Anh không phải là ngôn ngữ mẹ đẻ của tôi, vì vậy đến cấu trúc cơ sở dữ liệu và ngữ nghĩa, kiến thức và hiểu biết của tôi về những gì tôi đọc được giới hạn (nhưng đó là vấn đề của tôi)
Cảm ơn bạn đã chi tiết, đầy đủ mã, câu trả lời. Với một trong những @ Joe J, tôi khá chắc chắn nó sẽ giúp tôi trong suốt việc mô hình hóa ứng dụng của tôi. Trang web này là tuyệt vời, người dùng của nó quá :) – pistache
OK, đó là một giải pháp tuyệt vời mà bạn đã đưa ra ở đây, đặc biệt là thủ đoạn InheritanceManager, và toàn bộ gói django-model-utils. Cảm ơn một lần nữa – pistache