#+TITLE: Andreas Zweili #+SETUPFILE: ~/git_repos/notes/settings/html_theme/setup/theme-readtheorg.setup #+AUTHOR: Andreas Zweili * Models Models define the database layout in a django application. Each class represents a table in the database. A lot the models in this project are very small because they exist mainly to keep the information unified. ** Device The "Device" model represents a generel device about which I don't have that much information. It might represent an IOT device or something similarly closed. #+BEGIN_SRC python :tangle ../inventory/models.py from django.db import models class Device(models.Model): name = models.CharField(max_length=50) description = models.TextField() def __str__(self): return self.name #+END_SRC ** Weekday, DayOfMonth and Month These models contain all the days of the week the days in a month and all month in a year. #+BEGIN_SRC python :tangle ../inventory/models.py :padline 2 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 #+END_SRC #+BEGIN_SRC python :tangle ../inventory/models.py :padline 2 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() ecc = models.BooleanField(default=False) def __str__(self): return '{} {} GB'.format(self.type, self.size) #+END_SRC #+BEGIN_SRC python :tangle ../inventory/models.py :padline 2 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) #+END_SRC 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 #+END_SRC #+BEGIN_SRC python :tangle ../inventory/models.py :padline 2 class OperatingSystem(models.Model): name = models.CharField(max_length=50) def __str__(self): return self.name #+END_SRC #+BEGIN_SRC python :tangle ../inventory/models.py :padline 2 class Raid(models.Model): name = models.CharField(max_length=50) def __str__(self): return self.name #+END_SRC #+BEGIN_SRC python :tangle ../inventory/models.py :padline 2 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 #+END_SRC #+BEGIN_SRC python :tangle ../inventory/models.py :padline 2 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() #+END_SRC #+BEGIN_SRC python :tangle ../inventory/models.py :padline 2 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 #+END_SRC #+BEGIN_SRC python :tangle ../inventory/models.py :padline 2 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 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) #+END_SRC class RamInline(admin.StackedInline): #+BEGIN_SRC python :tangle ../inventory/admin.py :padline 2 model = ComputerRamRelation verbose_name_plural = 'Ram Modules' class DiskInline(admin.StackedInline): model = ComputerDiskRelation verbose_name_plural = 'Disks' class ComputerAdmin(admin.ModelAdmin): inlines = (RamInline, DiskInline) #+END_SRC #+BEGIN_SRC python :tangle ../inventory/admin.py :padline 2 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