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
|
@ -1,3 +1,4 @@
|
||||||
|
from django.urls import reverse
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from .container import Container, CanBeContained
|
from .container import Container, CanBeContained
|
||||||
|
|
||||||
|
@ -7,3 +8,7 @@ class Area(CanBeContained, Container):
|
||||||
description = models.CharField(max_length=4096)
|
description = models.CharField(max_length=4096)
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
changed_at = models.DateTimeField(auto_now=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.utils.text import slugify
|
||||||
from django.template.loader import get_template, TemplateDoesNotExist
|
from django.template.loader import get_template, TemplateDoesNotExist
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
@ -24,3 +25,7 @@ class Box(CanBeContained, Container):
|
||||||
return template
|
return template
|
||||||
except TemplateDoesNotExist:
|
except TemplateDoesNotExist:
|
||||||
return 'inventory/box-generic.html'
|
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.db import models
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
|
|
||||||
|
@ -5,7 +6,8 @@ from django.apps import apps
|
||||||
class Container(models.Model):
|
class Container(models.Model):
|
||||||
layout = models.ForeignKey('inventory.Layout', on_delete=models.PROTECT, null=True, blank=True)
|
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():
|
for model in apps.get_app_config('inventory').get_models():
|
||||||
if model == Container:
|
if model == Container:
|
||||||
continue
|
continue
|
||||||
|
@ -16,16 +18,20 @@ class Container(models.Model):
|
||||||
return Container, None
|
return Container, None
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
subclass, obj = self._subclass()
|
subclass, obj = self.subclass
|
||||||
return '{}: {}'.format(subclass.__name__, obj.name)
|
return '{}: {}'.format(subclass.__name__, obj.name)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def display_name(self):
|
def display_name(self):
|
||||||
_, obj = self._subclass()
|
_, obj = self.subclass
|
||||||
if obj is not None:
|
if obj is not None:
|
||||||
return obj.name
|
return obj.name
|
||||||
return 'Container'
|
return 'Container'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def url(self):
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
class CanBeContained(models.Model):
|
class CanBeContained(models.Model):
|
||||||
container = models.ForeignKey(
|
container = models.ForeignKey(
|
||||||
|
@ -38,3 +44,8 @@ class CanBeContained(models.Model):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
abstract = True
|
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 django.db import models
|
||||||
from .container import Container
|
from .container import Container
|
||||||
|
|
||||||
|
@ -7,3 +8,7 @@ class Workshop(Container):
|
||||||
description = models.CharField(max_length=4096)
|
description = models.CharField(max_length=4096)
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
changed_at = models.DateTimeField(auto_now=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