#+TITLE: Andreas Zweili #+SETUPFILE: ~/git_repos/notes/settings/html_theme/setup/theme-readtheorg.setup #+AUTHOR: Andreas Zweili * Models #+BEGIN_SRC python :tangle ../inventory/models.py #!/usr/bin/python3 from django.db import models class Device(models.Model): name = models.CharField(max_length=50) description = models.TextField() def __str__(self): return self.name class Weekday(models.Model): name = models.CharField(max_length=50) def __str__(self): return self.name class Month(models.Model): name = models.CharField(max_length=50) def __str__(self): return self.name class RamType(models.Model): name = models.CharField(max_length=50) def __str__(self): return self.name class Ram(models.Model): type = models.ForeignKey(RamType, on_delete=models.CASCADE) size_in_gb = models.FloatField() def __str__(self): return '{} {} GB'.format(self.type, self.size) class DiskType(models.Model): name = models.CharField(max_length=50) def __str__(self): return self.name class DiskSize(models.Model): size = models.FloatField() def __str__(self): return self.size + " GB" class Disk(models.Model): type = models.ForeignKey(DiskType, on_delete=models.CASCADE) size_in_gb = models.ForeignKey(DiskSize, on_delete=models.CASCADE) def __str__(self): return '{} {} GB'.format(self.type, self.size) class Architecture(models.Model): name = models.CharField(max_length=50) def __str__(self): return self.name class CpuManufacturer(models.Model): name = models.CharField(max_length=50) def __str__(self): return self.name class Cpu(models.Model): name = models.CharField(max_length=50) manufacturer = models.ForeignKey(CpuManufacturer, on_delete=models.PROTECT) number_of_cores = models.IntegerField() frequency = models.FloatField() architecture = models.ForeignKey(Architecture, on_delete=models.PROTECT) def __str__(self): return self.name class OperatingSystem(models.Model): name = models.CharField(max_length=50) def __str__(self): return self.name class Raid(models.Model): name = models.CharField(max_length=50) def __str__(self): return self.name class Computer(Device): hostname = models.CharField(max_length=20, unique=True) raid = models.ForeignKey(Raid, null=True, blank=True, on_delete=models.PROTECT) os = models.ForeignKey(OperatingSystem, on_delete=models.PROTECT) cpu = models.ForeignKey(Cpu, on_delete=models.PROTECT) ram = models.ManyToManyField(Ram, through='ComputerRamRelation') ip = models.CharField(max_length=15) disks = models.ManyToManyField(Disk, through='ComputerDiskRelation') host = models.ForeignKey('self', null=True, blank=True, on_delete=models.PROTECT) def __str__(self): return self.hostname class ComputerDiskRelation(models.Model): disk = models.ForeignKey(Disk, on_delete=models.CASCADE) computer = models.ForeignKey(Computer, on_delete=models.CASCADE) amount = models.IntegerField() class ComputerRamRelation(models.Model): ram = models.ForeignKey(Ram, on_delete=models.CASCADE) computer = models.ForeignKey(Computer, on_delete=models.CASCADE) amount = models.IntegerField() class Warranty(models.Model): device = models.ForeignKey(Device, on_delete=models.CASCADE) files = models.FileField() valid_until = models.DateField() def __str__(self): return self.device class CronJob(models.Model): name = models.CharField(max_length=50) host = models.ForeignKey(Computer, on_delete=models.CASCADE) command = models.CharField(max_length=50) time = models.TimeField() weekday = models.ForeignKey(Weekday, on_delete=models.CASCADE) month = models.ForeignKey(Month, on_delete=models.CASCADE) def __str__(self): return self.name #+END_SRC * Admin #+BEGIN_SRC python :tangle ../inventory/admin.py #!/usr/bin/python3 from django.contrib import admin from inventory.models import (Device, Weekday, Month, RamType, Ram, DiskType, DiskSize, Disk, Architecture, CpuManufacturer, Cpu, OperatingSystem, Raid, Computer, ComputerDiskRelation, ComputerRamRelation, Warranty, CronJob) class RamInline(admin.StackedInline): model = ComputerRamRelation verbose_name_plural = 'Ram Modules' class DiskInline(admin.StackedInline): model = ComputerDiskRelation verbose_name_plural = 'Disks' class ComputerAdmin(admin.ModelAdmin): inlines = (RamInline, DiskInline) admin.site.register(Device) admin.site.register(Weekday) admin.site.register(Month) admin.site.register(RamType) admin.site.register(Ram) admin.site.register(DiskType) admin.site.register(DiskSize) admin.site.register(Disk) admin.site.register(Architecture) admin.site.register(CpuManufacturer) admin.site.register(Cpu) admin.site.register(OperatingSystem) admin.site.register(Raid) admin.site.register(Computer) admin.site.register(ComputerDiskRelation) admin.site.register(ComputerRamRelation) admin.site.register(Warranty) admin.site.register(CronJob) #+END_SRC * Views #+BEGIN_SRC python :tangle ../inventory/views.py #!/usr/bin/python3 from django.shortcuts import get_object_or_404, render #+END_SRC