Je travaille sur un outil de gestion d'inventaire serveur/centre de données. J'ai une classe pour définir un "périphérique" par défaut, qui est ensuite utilisé pour exprimer des périphériques personnalisés (serveurs linux, serveurs Windows, routeurs, commutateurs, etc.)Modèle django - relations entre modèles hérités?
J'ai également des modèles de données configurés pour exprimer les adresses IP dans un réseau. Ma question est, quelle serait la meilleure façon d'exprimer la relation entre tous les différents modèles d'appareils et le modèle d'adresse IPv4?
class device(models.Model):
'''the primary object. all types of networked devices are based on and inherit this class'''
STATUS_CHOICES = (('0', 'unknown'),('1','active'),('2','pending'),('3','inactive'),('4', 'inventory'),('5','mothballed'),('6','surplus'),)
'''technical information'''
hostname = models.CharField(max_length=45, unique=True, db_index=True, help_text="The published hostname for this device")
'''misc. information'''
description = models.TextField(blank=True, null=True, help_text="A free-form description field")
type = models.ForeignKey(deviceStatus, help_text="The classification for this device")
status = models.IntegerField(choices=STATUS_CHOICES, help_text="current status of device")
is_monitored = models.BooleanField(default=True, help_text="is the device monitored?")
date_added = models.DateTimeField(auto_now=True, help_text="Date and Time device is entered into Barrelhouse", editable=False)
warranty_expriry = models.DateField(help_text="Date Manufacturer warranty expires")
extended_warranty = models.BooleanField(help_text="Whether or not device has some extended warranty in addition to the manufacturer",default=False, validators=[validate_extended_warr])
ext_warranty_expiry = models.DateField(help_text="Date Extended Warranty Expires", null=True)
account = models.ForeignKey(vendorAccount, help_text="account associated with this device")
class Meta:
abstract = True
class deviceLinuxSystem(device):
'''a typcial linux system --- you can get as specific as you want to in various server and desktop types.'''
ip_address = generic.GenericRelation(ipv4address)
def get_absolute_url(self):
return "linux_devices/%i/" % self.id
def __unicode__(self):
return self.hostname
class Meta:
verbose_name = "Linux System"
class deviceWindowsSystem(device):
'''a typical windws system'''
def get_absolute_url(self):
return "windows_devices/%i/" % self.id
def __unicode__(self):
return self.hostname
class Meta:
verbose_name = "Windows System"
class ipv4address(models.Model):
'''a model to represent all used IPv4 addresses on networks'''
netIP = models.IPAddressField(help_text="associated address", verbose_name="IP Address", unique=True, db_index=True)
network = models.ForeignKey(network, help_text="Network this IP lives on")
Pour suivre les conventions de codage de Django, vous devez toujours nommer vos classes dans UpperCamelCase! –