Add url property to all container types and container_url to all contained types
This commit is contained in:
parent
28887f9fc0
commit
2b2b5f0e23
4 changed files with 29 additions and 3 deletions
inventory/models
|
@ -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])
|
||||
|
|
|
@ -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])
|
||||
|
|
|
@ -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
|
|
@ -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])
|
||||
|
|
Loading…
Reference in a new issue