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 @@
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 @@
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 @@
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 @@
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__)