Add url property to all container types and container_url to all contained types

This commit is contained in:
Johannes Schriewer 2020-12-22 03:16:38 +01:00
parent 28887f9fc0
commit 2b2b5f0e23
4 changed files with 29 additions and 3 deletions

View file

@ -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])

View file

@ -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])

View file

@ -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

View file

@ -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])