diff --git a/assets/converters.py b/assets/converters.py new file mode 100644 index 00000000..90ced6fe --- /dev/null +++ b/assets/converters.py @@ -0,0 +1,8 @@ +class AssetIDConverter: # Forces lowercase to uppercase + regex = '[^/]+' + + def to_python(self, value): + return value.upper() + + def to_url(self, value): + return value.upper() diff --git a/assets/urls.py b/assets/urls.py index 468a2421..4ec111c1 100644 --- a/assets/urls.py +++ b/assets/urls.py @@ -1,22 +1,24 @@ from django.contrib.auth.decorators import login_required -from django.urls import path +from django.urls import path, register_converter from django.views.decorators.clickjacking import xframe_options_exempt from PyRIGS.decorators import has_oembed, permission_required_with_403 from PyRIGS.views import OEmbedView -from assets import views +from . import views, converters + +register_converter(converters.AssetIDConverter, 'asset') urlpatterns = [ path('', login_required(views.AssetList.as_view()), name='asset_index'), path('asset/list/', login_required(views.AssetList.as_view()), name='asset_list'), - path('asset/id//', has_oembed(oembed_view="asset_oembed")(views.AssetDetail.as_view()), name='asset_detail'), + path('asset/id//', has_oembed(oembed_view="asset_oembed")(views.AssetDetail.as_view()), name='asset_detail'), path('asset/create/', permission_required_with_403('assets.add_asset') (views.AssetCreate.as_view()), name='asset_create'), - path('asset/id//edit/', permission_required_with_403('assets.change_asset') + path('asset/id//edit/', permission_required_with_403('assets.change_asset') (views.AssetEdit.as_view()), name='asset_update'), - path('asset/id//duplicate/', permission_required_with_403('assets.add_asset') + path('asset/id//duplicate/', permission_required_with_403('assets.add_asset') (views.AssetDuplicate.as_view()), name='asset_duplicate'), - path('asset/id//label', login_required(views.GenerateLabel.as_view()), name='generate_label'), + path('asset/id//label', login_required(views.GenerateLabel.as_view()), name='generate_label'), path('cabletype/list/', login_required(views.CableTypeList.as_view()), name='cable_type_list'), path('cabletype/create/', permission_required_with_403('assets.add_cable_type')(views.CableTypeCreate.as_view()), name='cable_type_create'), diff --git a/assets/views.py b/assets/views.py index 6acee29d..261d9753 100644 --- a/assets/views.py +++ b/assets/views.py @@ -48,9 +48,9 @@ class AssetList(LoginRequiredMixin, generic.ListView): queryset = self.model.objects.all() elif len(query_string) >= 3: queryset = self.model.objects.filter( - Q(asset_id__exact=query_string) | Q(description__icontains=query_string) | Q(serial_number__exact=query_string)) + Q(asset_id__exact=query_string.upper()) | Q(description__icontains=query_string) | Q(serial_number__exact=query_string)) else: - queryset = self.model.objects.filter(Q(asset_id__exact=query_string)) + queryset = self.model.objects.filter(Q(asset_id__exact=query_string.upper())) if form.cleaned_data['category']: queryset = queryset.filter(category__in=form.cleaned_data['category'])