diff --git a/inventory/models/area.py b/inventory/models/area.py index 830b37f..38caaff 100644 --- a/inventory/models/area.py +++ b/inventory/models/area.py @@ -1,3 +1,4 @@ +from django.urls import reverse from django.db import models from .container import Container, CanBeContained @@ -7,3 +8,7 @@ class Area(CanBeContained, Container): description = models.CharField(max_length=4096) created_at = models.DateTimeField(auto_now_add=True) changed_at = models.DateTimeField(auto_now=True) + + @property + def url(self): + return reverse("area-detail", args=[self.pk]) diff --git a/inventory/models/box.py b/inventory/models/box.py index 1985f59..b2a69ec 100644 --- a/inventory/models/box.py +++ b/inventory/models/box.py @@ -1,3 +1,4 @@ +from django.urls import reverse from django.utils.text import slugify from django.template.loader import get_template, TemplateDoesNotExist from django.db import models @@ -24,3 +25,7 @@ class Box(CanBeContained, Container): return template except TemplateDoesNotExist: return 'inventory/box-generic.html' + + @property + def url(self): + return reverse("box-detail", args=[self.pk]) diff --git a/inventory/models/container.py b/inventory/models/container.py index 629b3ca..c626151 100644 --- a/inventory/models/container.py +++ b/inventory/models/container.py @@ -1,3 +1,4 @@ +from django.urls import reverse from django.db import models from django.apps import apps @@ -5,7 +6,8 @@ from django.apps import apps class Container(models.Model): layout = models.ForeignKey('inventory.Layout', on_delete=models.PROTECT, null=True, blank=True) - def _subclass(self): + @property + def subclass(self): for model in apps.get_app_config('inventory').get_models(): if model == Container: continue @@ -16,16 +18,20 @@ class Container(models.Model): return Container, None def __str__(self): - subclass, obj = self._subclass() + subclass, obj = self.subclass return '{}: {}'.format(subclass.__name__, obj.name) @property def display_name(self): - _, obj = self._subclass() + _, obj = self.subclass if obj is not None: return obj.name return 'Container' + @property + def url(self): + return None + class CanBeContained(models.Model): container = models.ForeignKey( @@ -38,3 +44,8 @@ class CanBeContained(models.Model): class Meta: abstract = True + + @property + def container_url(self): + _, obj = self.container.subclass + return obj.url \ No newline at end of file diff --git a/inventory/models/workshop.py b/inventory/models/workshop.py index 354c8a8..29d1a18 100644 --- a/inventory/models/workshop.py +++ b/inventory/models/workshop.py @@ -1,3 +1,4 @@ +from django.urls import reverse from django.db import models from .container import Container @@ -7,3 +8,7 @@ class Workshop(Container): description = models.CharField(max_length=4096) created_at = models.DateTimeField(auto_now_add=True) changed_at = models.DateTimeField(auto_now=True) + + @property + def url(self): + return reverse("workshop-detail", args=[self.pk])