Don't craft urls in pedagogy frontend

This commit is contained in:
2025-12-24 14:41:26 +01:00
parent 086a61f493
commit 6ec1834540
4 changed files with 28 additions and 4 deletions

View File

@@ -50,4 +50,4 @@ class UeController(ControllerBase):
) )
@paginate(PageNumberPaginationExtra, page_size=100) @paginate(PageNumberPaginationExtra, page_size=100)
def fetch_ue_list(self, search: Query[UeFilterSchema]): def fetch_ue_list(self, search: Query[UeFilterSchema]):
return search.filter(UE.objects.order_by("code").values()) return search.filter(UE.objects.order_by("code"))

View File

@@ -1,6 +1,7 @@
from typing import Annotated, Literal from typing import Annotated, Literal
from django.db.models import Q from django.db.models import Q
from django.urls import reverse
from django.utils import html from django.utils import html
from haystack.query import SearchQuerySet from haystack.query import SearchQuerySet
from ninja import FilterLookup, FilterSchema, ModelSchema, Schema from ninja import FilterLookup, FilterSchema, ModelSchema, Schema
@@ -85,6 +86,22 @@ class SimpleUeSchema(ModelSchema):
"department", "department",
] ]
detail_url: str
edit_url: str
delete_url: str
@staticmethod
def resolve_detail_url(obj: UE) -> str:
return reverse("pedagogy:ue_detail", kwargs={"ue_id": obj.id})
@staticmethod
def resolve_edit_url(obj: UE) -> str:
return reverse("pedagogy:ue_update", kwargs={"ue_id": obj.id})
@staticmethod
def resolve_delete_url(obj: UE) -> str:
return reverse("pedagogy:ue_delete", kwargs={"ue_id": obj.id})
class UeSchema(ModelSchema): class UeSchema(ModelSchema):
"""Our complete representation of an UE""" """Our complete representation of an UE"""

View File

@@ -109,7 +109,7 @@
<tbody :aria-busy="loading"> <tbody :aria-busy="loading">
<template x-for="ue in ues.results" :key="ue.id"> <template x-for="ue in ues.results" :key="ue.id">
<tr <tr
@click="window.location.href = `/pedagogy/ue/${ue.id}`" @click="window.location.href = ue.detail_url"
class="clickable" class="clickable"
:class="{closed: ue.semester === 'CLOSED'}" :class="{closed: ue.semester === 'CLOSED'}"
> >
@@ -122,10 +122,10 @@
<td><i :class="ue.semester.includes('AUTUMN') && 'fa fa-leaf'"></i></td> <td><i :class="ue.semester.includes('AUTUMN') && 'fa fa-leaf'"></i></td>
<td><i :class="ue.semester.includes('SPRING') && 'fa-regular fa-sun'"></i></td> <td><i :class="ue.semester.includes('SPRING') && 'fa-regular fa-sun'"></i></td>
{%- if user.has_perm("pedagogy.change_ue") -%} {%- if user.has_perm("pedagogy.change_ue") -%}
<td><a :href="`/pedagogy/ue/${ue.id}/edit`">{% trans %}Edit{% endtrans %}</a></td> <td><a :href="ue.edit_url">{% trans %}Edit{% endtrans %}</a></td>
{%- endif -%} {%- endif -%}
{%- if user.has_perm("pedagogy.delete_ue") -%} {%- if user.has_perm("pedagogy.delete_ue") -%}
<td><a :href="`/pedagogy/ue/${ue.id}/delete`">{% trans %}Delete{% endtrans %}</a></td> <td><a :href="ue.delete_url">{% trans %}Delete{% endtrans %}</a></td>
{%- endif -%} {%- endif -%}
</tr> </tr>
</template> </template>

View File

@@ -107,6 +107,13 @@ class TestUESearch(TestCase):
"credit_type": ue.credit_type, "credit_type": ue.credit_type,
"semester": ue.semester, "semester": ue.semester,
"department": ue.department, "department": ue.department,
"detail_url": reverse(
"pedagogy:ue_detail", kwargs={"ue_id": ue.id}
),
"edit_url": reverse("pedagogy:ue_update", kwargs={"ue_id": ue.id}),
"delete_url": reverse(
"pedagogy:ue_delete", kwargs={"ue_id": ue.id}
),
} }
], ],
} }