From b3c6681add12bc54beb7e90e10023844fdd37b85 Mon Sep 17 00:00:00 2001 From: Francisco Sanz Date: Thu, 3 Oct 2024 18:18:06 +0200 Subject: [PATCH] Add first version of devices model with admin panel --- devices/__init__.py | 0 devices/admin.py | 7 +++++ devices/apps.py | 6 ++++ devices/migrations/0001_initial.py | 45 ++++++++++++++++++++++++++++++ devices/migrations/__init__.py | 0 devices/models.py | 34 ++++++++++++++++++++++ devices/tests.py | 3 ++ devices/views.py | 3 ++ openred/settings.py | 3 ++ 9 files changed, 101 insertions(+) create mode 100644 devices/__init__.py create mode 100644 devices/admin.py create mode 100644 devices/apps.py create mode 100644 devices/migrations/0001_initial.py create mode 100644 devices/migrations/__init__.py create mode 100644 devices/models.py create mode 100644 devices/tests.py create mode 100644 devices/views.py diff --git a/devices/__init__.py b/devices/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/devices/admin.py b/devices/admin.py new file mode 100644 index 0000000..e193bea --- /dev/null +++ b/devices/admin.py @@ -0,0 +1,7 @@ +from django.contrib import admin +from .models import DeviceModel, Device + +# Register your models here. +admin.site.register(DeviceModel) +admin.site.register(Device) + diff --git a/devices/apps.py b/devices/apps.py new file mode 100644 index 0000000..f1dad42 --- /dev/null +++ b/devices/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class DevicesConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'devices' diff --git a/devices/migrations/0001_initial.py b/devices/migrations/0001_initial.py new file mode 100644 index 0000000..ac6c4a6 --- /dev/null +++ b/devices/migrations/0001_initial.py @@ -0,0 +1,45 @@ +# Generated by Django 4.2.16 on 2024-10-03 16:14 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='DeviceModel', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ('manufacturer', models.CharField(max_length=100)), + ('version', models.CharField(blank=True, max_length=50, null=True)), + ('max_radiation_range', models.FloatField(help_text='Maximum radiation range the device can measure (in appropriate units)')), + ], + ), + migrations.CreateModel( + name='Device', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('serial_number', models.CharField(max_length=100, unique=True)), + ('hash', models.CharField(max_length=64, unique=True)), + ('purchase_date', models.DateField(blank=True, null=True)), + ('calibration_date', models.DateField(blank=True, null=True)), + ('is_active', models.BooleanField(default=True)), + ('device_model', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='devices.devicemodel')), + ('owner', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name': 'Device', + 'verbose_name_plural': 'Devices', + 'ordering': ['serial_number'], + }, + ), + ] diff --git a/devices/migrations/__init__.py b/devices/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/devices/models.py b/devices/models.py new file mode 100644 index 0000000..133e443 --- /dev/null +++ b/devices/models.py @@ -0,0 +1,34 @@ +from django.db import models +from django.contrib.auth.models import User # Assuming you're using Django's User model for owners + +class DeviceModel(models.Model): + """ + Represents the different models of devices used for gamma radiation measurement. + """ + name = models.CharField(max_length=100) # Name of the device model + manufacturer = models.CharField(max_length=100) # Manufacturer of the device + version = models.CharField(max_length=50, blank=True, null=True) # Optional version of the device model + max_radiation_range = models.FloatField(help_text="Maximum radiation range the device can measure (in appropriate units)") + + def __str__(self): + return f"{self.name} (by {self.manufacturer})" + +class Device(models.Model): + """ + Represents an individual gamma radiation measurement device. + """ + device_model = models.ForeignKey(DeviceModel, on_delete=models.CASCADE) # Link to the DeviceModel + serial_number = models.CharField(max_length=100, unique=True) # Unique identifier for the device (serial number) + hash = models.CharField(max_length=64, unique=True) # Unique hash for the device (for identification) + owner = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True) # Owner of the device + purchase_date = models.DateField(blank=True, null=True) # Optional field for when the device was purchased + calibration_date = models.DateField(blank=True, null=True) # Date of the last calibration + is_active = models.BooleanField(default=True) # Indicates if the device is still in use + + def __str__(self): + return f"Device {self.serial_number} ({self.device_model.name})" + + class Meta: + verbose_name = "Device" + verbose_name_plural = "Devices" + ordering = ['serial_number'] diff --git a/devices/tests.py b/devices/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/devices/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/devices/views.py b/devices/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/devices/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/openred/settings.py b/openred/settings.py index 4422fca..02f335a 100644 --- a/openred/settings.py +++ b/openred/settings.py @@ -46,6 +46,9 @@ 'allauth.account', 'allauth.socialaccount', 'allauth.socialaccount.providers.google', + + # Custom apps + 'devices', ] MIDDLEWARE = [