Add slug field for tools, and base URLs on it
This commit is contained in:
parent
cb28da70e9
commit
6918a3d497
@ -28,6 +28,4 @@ class TaskAdmin(MarkdownxModelAdmin):
|
|||||||
@admin.register(Tool)
|
@admin.register(Tool)
|
||||||
class ToolAdmin(admin.ModelAdmin):
|
class ToolAdmin(admin.ModelAdmin):
|
||||||
inlines = [GroupToolSubscriptionInline]
|
inlines = [GroupToolSubscriptionInline]
|
||||||
|
prepopulated_fields = {"slug": ("name",)}
|
||||||
|
|
||||||
|
|
||||||
|
29
tasks/migrations/0002_tool_slug.py
Normal file
29
tasks/migrations/0002_tool_slug.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
from django.db import migrations, models
|
||||||
|
from django.utils.text import slugify
|
||||||
|
|
||||||
|
|
||||||
|
def slugify_name(apps, schema_editor):
|
||||||
|
Tool = apps.get_model('tasks', 'tool')
|
||||||
|
for tool in Tool.objects.all():
|
||||||
|
tool.slug = slugify(tool.name)
|
||||||
|
tool.save(update_fields=['slug'])
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('tasks', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='tool',
|
||||||
|
name='slug',
|
||||||
|
field=models.SlugField(blank=True, null=True, unique=True),
|
||||||
|
),
|
||||||
|
migrations.RunPython(slugify_name),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='tool',
|
||||||
|
name='slug',
|
||||||
|
field=models.SlugField(unique=True),
|
||||||
|
)
|
||||||
|
]
|
@ -9,13 +9,14 @@ from markdownx.models import MarkdownxField
|
|||||||
|
|
||||||
class Tool(models.Model):
|
class Tool(models.Model):
|
||||||
name = models.CharField(max_length=200)
|
name = models.CharField(max_length=200)
|
||||||
|
slug = models.SlugField(unique=True)
|
||||||
asset_tag = models.CharField(max_length=10, unique=True, blank=True)
|
asset_tag = models.CharField(max_length=10, unique=True, blank=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.name} - {self.asset_tag}"
|
return f"{self.name}{(' - ' + self.asset_tag) if self.asset_tag else ''}"
|
||||||
|
|
||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
return reverse('toolDetail', args=[self.asset_tag])
|
return reverse('toolDetail', args=[self.slug])
|
||||||
|
|
||||||
|
|
||||||
class Task(models.Model):
|
class Task(models.Model):
|
||||||
@ -33,7 +34,7 @@ class Task(models.Model):
|
|||||||
return f"{self.tool.name}: {self.name}"
|
return f"{self.tool.name}: {self.name}"
|
||||||
|
|
||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
return reverse('taskDetail', args=[self.tool.asset_tag, self.slug])
|
return reverse('taskDetail', args=[self.tool.slug, self.slug])
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def last_event(self):
|
def last_event(self):
|
||||||
|
@ -6,9 +6,9 @@ from . import views
|
|||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', views.index, name='index'),
|
path('', views.index, name='index'),
|
||||||
# ex: /CMS00001/
|
# ex: /CMS00001/
|
||||||
path('<str:asset_tag>/', views.toolDetail, name='toolDetail'),
|
path('<str:tool_slug>/', views.toolDetail, name='toolDetail'),
|
||||||
# ex: /CMS00001/tasks/
|
# ex: /CMS00001/tasks/
|
||||||
path('<str:asset_tag>/tasks/', lambda request, asset_tag: redirect('toolDetail', asset_tag)),
|
path('<str:tool_slug>/tasks/', lambda request, tool_slug: redirect('toolDetail', tool_slug)),
|
||||||
# ex: /CMS00001/tasks/task_name/
|
# ex: /CMS00001/tasks/task_name/
|
||||||
path('<str:asset_tag>/tasks/<str:task_slug>', views.taskDetail, name='taskDetail'),
|
path('<str:tool_slug>/tasks/<str:task_slug>', views.taskDetail, name='taskDetail'),
|
||||||
]
|
]
|
||||||
|
@ -13,8 +13,8 @@ def index(request):
|
|||||||
return render(request, 'tasks/index.djhtml', context)
|
return render(request, 'tasks/index.djhtml', context)
|
||||||
|
|
||||||
|
|
||||||
def toolDetail(request, asset_tag):
|
def toolDetail(request, tool_slug):
|
||||||
tool = get_object_or_404(Tool, asset_tag=asset_tag)
|
tool = get_object_or_404(Tool, slug=tool_slug)
|
||||||
tasks = tool.task_set.all()
|
tasks = tool.task_set.all()
|
||||||
context = {
|
context = {
|
||||||
'tool': tool,
|
'tool': tool,
|
||||||
@ -23,8 +23,8 @@ def toolDetail(request, asset_tag):
|
|||||||
return render(request, 'tasks/toolDetail.djhtml', context)
|
return render(request, 'tasks/toolDetail.djhtml', context)
|
||||||
|
|
||||||
|
|
||||||
def taskDetail(request, asset_tag, task_slug):
|
def taskDetail(request, tool_slug, task_slug):
|
||||||
tool = get_object_or_404(Tool, asset_tag=asset_tag)
|
tool = get_object_or_404(Tool, slug=tool_slug)
|
||||||
task = get_object_or_404(tool.task_set, slug=task_slug)
|
task = get_object_or_404(tool.task_set, slug=task_slug)
|
||||||
events = task.event_set.all()
|
events = task.event_set.all()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user