diff --git a/ram/metadata/models.py b/ram/metadata/models.py index 01b032c..ad38f77 100644 --- a/ram/metadata/models.py +++ b/ram/metadata/models.py @@ -1,4 +1,4 @@ -from urllib.parse import quote_plus +from urllib.parse import quote from django.db import models from django.conf import settings @@ -37,7 +37,7 @@ class Manufacturer(models.Model): return self.name def safe_name(self): - return quote_plus(self.name, safe="&") + return quote(self.__str__().lower(), safe="& ") def logo_thumbnail(self): return get_image_preview(self.logo.url) @@ -62,7 +62,7 @@ class Company(models.Model): return self.name def safe_name(self): - return quote_plus(self.name, safe="&") + return quote(self.__str__().lower(), safe="& ") def logo_thumbnail(self): return get_image_preview(self.logo.url) @@ -104,6 +104,9 @@ class Scale(models.Model): def __str__(self): return str(self.scale) + def safe_name(self): + return quote(self.__str__(), safe="& ") + class Tag(models.Model): name = models.CharField(max_length=128, unique=True) @@ -112,6 +115,9 @@ class Tag(models.Model): def __str__(self): return self.name + def safe_name(self): + return self.slug + @receiver(models.signals.pre_save, sender=Tag) def slug_pre_save(sender, instance, **kwargs): @@ -131,3 +137,6 @@ class RollingStockType(models.Model): def __str__(self): return "{0} {1}".format(self.type, self.category) + + def safe_name(self): + return quote(self.__str__().lower(), safe="& ") diff --git a/ram/portal/templates/cards.html b/ram/portal/templates/cards.html index ad1aac1..f9cc312 100644 --- a/ram/portal/templates/cards.html +++ b/ram/portal/templates/cards.html @@ -38,7 +38,7 @@ Company - {{ d.rolling_class.company }} + {{ d.rolling_class.company }} @@ -56,12 +56,12 @@ Manufacturer {%if d.manufacturer %} - {{ d.manufacturer }}{% if d.manufacturer.website %} {% endif %} + {{ d.manufacturer }}{% if d.manufacturer.website %} {% endif %} {% endif %} Scale - {{ d.scale }} + {{ d.scale }} SKU diff --git a/ram/portal/templates/companies.html b/ram/portal/templates/companies.html index 61f83aa..74d1087 100644 --- a/ram/portal/templates/companies.html +++ b/ram/portal/templates/companies.html @@ -42,7 +42,7 @@
- Show all rolling stock + Show all rolling stock {% if request.user.is_staff %}Edit{% endif %}
diff --git a/ram/portal/templates/manufacturers.html b/ram/portal/templates/manufacturers.html index f4318f7..dab3c8b 100644 --- a/ram/portal/templates/manufacturers.html +++ b/ram/portal/templates/manufacturers.html @@ -34,7 +34,7 @@
- Show all rolling stock + Show all rolling stock {% if request.user.is_staff %}Edit{% endif %}
diff --git a/ram/portal/templates/scales.html b/ram/portal/templates/scales.html index d47d2f5..bcf1ac1 100644 --- a/ram/portal/templates/scales.html +++ b/ram/portal/templates/scales.html @@ -32,7 +32,7 @@
- Show all rolling stock + Show all rolling stock {% if request.user.is_staff %}Edit{% endif %}
diff --git a/ram/portal/templates/types.html b/ram/portal/templates/types.html index a58a8be..f7de10d 100644 --- a/ram/portal/templates/types.html +++ b/ram/portal/templates/types.html @@ -24,7 +24,7 @@
- Show all rolling stock + Show all rolling stock {% if request.user.is_staff %}Edit{% endif %}
diff --git a/ram/portal/views.py b/ram/portal/views.py index 08a84f1..1ffa269 100644 --- a/ram/portal/views.py +++ b/ram/portal/views.py @@ -1,7 +1,7 @@ import base64 import operator from functools import reduce -from urllib.parse import unquote_plus +from urllib.parse import unquote from django.views import View from django.http import Http404, HttpResponseBadRequest @@ -174,20 +174,31 @@ class GetRosterFiltered(View): def run_filter(self, request, search, _filter, page=1): site_conf = get_site_conf() if _filter == "type": - title = get_object_or_404(RollingStockType, pk=search) - query = Q(rolling_class__type__pk=search) - elif _filter == "company": - title = get_object_or_404(Company, pk=search) - query = Q(rolling_class__company__pk=search) - elif _filter == "manufacturer": - title = Manufacturer.objects.get(pk=search) + type_ = " ".join(search.split()[:-1]) + category = search.split()[-1] + try: + title = ( + RollingStockType.objects.filter(type__iexact=type_) + .get(category__iexact=category) + ) + except ObjectDoesNotExist: + raise Http404 query = Q( - Q(rolling_class__manufacturer__pk=search) - | Q(manufacturer__pk=search) + Q(rolling_class__type__type__iexact=type_) + & Q(rolling_class__type__category__iexact=category) + ) + elif _filter == "company": + title = get_object_or_404(Company, name__iexact=search) + query = Q(rolling_class__company__name__iexact=search) + elif _filter == "manufacturer": + title = get_object_or_404(Manufacturer, name__iexact=search) + query = Q( + Q(rolling_class__manufacturer__name__iexact=search) + | Q(manufacturer__name__iexact=search) ) elif _filter == "scale": - title = get_object_or_404(Scale, pk=search) - query = Q(scale__pk=search) + title = get_object_or_404(Scale, scale__iexact=search) + query = Q(scale__scale__iexact=search) elif _filter == "tag": title = get_object_or_404(Tag, slug=search) query = Q(tags__slug__iexact=search) @@ -211,7 +222,7 @@ class GetRosterFiltered(View): def get(self, request, search, _filter, page=1): data, title, matches, page_range = self.run_filter( - request, search, _filter, page + request, unquote(search), _filter, page ) return render( diff --git a/ram/ram/__init__.py b/ram/ram/__init__.py index e493d21..bd13107 100644 --- a/ram/ram/__init__.py +++ b/ram/ram/__init__.py @@ -1,4 +1,4 @@ from ram.utils import git_suffix -__version__ = "0.1.1" +__version__ = "0.1.2" __version__ += git_suffix(__file__)