network_inventory/inventory/models/computer.py

80 lines
2.5 KiB
Python

from django.db import models
from .cpu import Cpu
from .devices import ConnectedDevice
from .disk import Disk
from .os import OperatingSystem
from .ram import Ram
from .software import Software, SoftwareArchitecture
class Computer(ConnectedDevice):
os = models.ForeignKey(OperatingSystem, models.SET_NULL, blank=True,
null=True, verbose_name='OS')
cpu = models.ManyToManyField(Cpu, through='ComputerCpuRelation')
ram = models.ManyToManyField(Ram, through='ComputerRamRelation')
disks = models.ManyToManyField(Disk, through='ComputerDiskRelation')
software = models.ManyToManyField(Software,
through='ComputerSoftwareRelation')
host = models.ForeignKey('self', null=True, blank=True,
on_delete=models.CASCADE)
allocated_space = models.IntegerField(null=True, blank=True)
def __str__(self):
return str(self.name)
class Meta:
ordering = ['name']
def get_absolute_url(self):
from django.urls import reverse
return reverse('computer', args=[str(self.id)])
class ComputerCpuRelation(models.Model):
cpu = models.ForeignKey(Cpu, on_delete=models.CASCADE)
computer = models.ForeignKey(Computer, on_delete=models.CASCADE)
amount = models.IntegerField()
def __str__(self):
return self.computer.name
class Meta:
verbose_name_plural = "CPUs in Computer"
class ComputerRamRelation(models.Model):
ram = models.ForeignKey(Ram, on_delete=models.CASCADE)
computer = models.ForeignKey(Computer, on_delete=models.CASCADE)
amount = models.IntegerField()
def __str__(self):
return self.computer.name
class Meta:
verbose_name_plural = "RAM Modules in Computer"
class ComputerDiskRelation(models.Model):
disk = models.ForeignKey(Disk, on_delete=models.CASCADE)
computer = models.ForeignKey(Computer, on_delete=models.CASCADE)
amount = models.IntegerField()
def __str__(self):
return self.computer.name
class Meta:
verbose_name_plural = "Disks in Computer"
class ComputerSoftwareRelation(models.Model):
software = models.ForeignKey(Software, on_delete=models.CASCADE)
computer = models.ForeignKey(Computer, on_delete=models.CASCADE)
architecture = models.ForeignKey(SoftwareArchitecture, models.SET_NULL,
blank=True, null=True)
def __str__(self):
return self.computer.name
class Meta:
verbose_name_plural = "Software on Computer"