from django.db import models class BoxType(models.Model): """A type of storage box with specific dimensions.""" name = models.CharField(max_length=255) width = models.PositiveIntegerField(help_text='Width in millimeters') height = models.PositiveIntegerField(help_text='Height in millimeters') length = models.PositiveIntegerField(help_text='Length in millimeters') class Meta: ordering = ['name'] def __str__(self): return self.name class Box(models.Model): """A storage box in the lab.""" id = models.CharField( max_length=10, primary_key=True, help_text='Alphanumeric identifier (max 10 characters)' ) box_type = models.ForeignKey( BoxType, on_delete=models.PROTECT, related_name='boxes' ) class Meta: verbose_name_plural = 'boxes' def __str__(self): return self.id class ThingType(models.Model): """A type/category for things stored in boxes.""" name = models.CharField(max_length=255, unique=True) class Meta: ordering = ['name'] def __str__(self): return self.name class Thing(models.Model): """An item stored in a box.""" name = models.CharField(max_length=255) thing_type = models.ForeignKey( ThingType, on_delete=models.PROTECT, related_name='things' ) box = models.ForeignKey( Box, on_delete=models.PROTECT, related_name='things' ) description = models.TextField(blank=True) picture = models.ImageField(upload_to='things/', blank=True) class Meta: ordering = ['name'] def __str__(self): return self.name