diff --git a/requirements.txt b/requirements.txt
index 0b9aa4b..9a492c3 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,10 +2,11 @@ Django==1.5.1
South==0.8.1
astroid==1.0.0
coverage==3.6
-distribute==0.6.34
+distribute==0.6.49
django-dajax==0.9.2
django-dajaxice==0.5.5
django-jenkins==0.14.1
+django-model-utils==2.0
jslint==0.6.0
logilab-common==0.60.0
pep8==1.4.6
diff --git a/three_d_viewer/models.py b/three_d_viewer/models.py
index 5daca3d..e42dff0 100644
--- a/three_d_viewer/models.py
+++ b/three_d_viewer/models.py
@@ -3,6 +3,7 @@ Defines the models that that Django application uses
"""
from django.db import models
+from model_utils.managers import InheritanceManager
class CommonInfo(models.Model):
@@ -32,6 +33,8 @@ class Category(CommonInfo):
on_delete=models.SET_NULL,
related_name='children')
+ objects = InheritanceManager()
+
@property
def active_children(self):
return self.children.filter(active=True).order_by('name')
@@ -53,6 +56,16 @@ class Sample(CommonInfo):
on_delete=models.SET_NULL,
related_name="samples")
+ #Use the inheritance manager for handling subclasses
+ objects = InheritanceManager()
+
+ @property
+ def url(self):
+ if isinstance(self, Mineral):
+ return 'three_d_viewer:mineral_detail'
+ else:
+ return 'three_d_viewer:detail'
+
class Mineral(Sample):
"""
diff --git a/three_d_viewer/templates/three_d_viewer/mineral_detail.html b/three_d_viewer/templates/three_d_viewer/mineral_detail.html
new file mode 100644
index 0000000..65e1aaf
--- /dev/null
+++ b/three_d_viewer/templates/three_d_viewer/mineral_detail.html
@@ -0,0 +1,6 @@
+{% extends "three_d_viewer/detail.html" %}
+
+{% block pageheader %}
+
{{ 'MINERALS' }}
+ {{ sample.description }}
+{% endblock %}
\ No newline at end of file
diff --git a/three_d_viewer/templates/three_d_viewer/treenode.html b/three_d_viewer/templates/three_d_viewer/treenode.html
index fcebdec..8d1783a 100644
--- a/three_d_viewer/templates/three_d_viewer/treenode.html
+++ b/three_d_viewer/templates/three_d_viewer/treenode.html
@@ -8,7 +8,7 @@
{%endwith%}
{% endfor %}
{% for sample in category.active_samples %}
- {{ sample.name }}
+ {{ sample.name }}
{% endfor %}
\ No newline at end of file
diff --git a/three_d_viewer/urls.py b/three_d_viewer/urls.py
index 963d4b6..90a04a4 100644
--- a/three_d_viewer/urls.py
+++ b/three_d_viewer/urls.py
@@ -6,6 +6,7 @@ urlpatterns = patterns(
'',
url(r'^$', views.HomeView.as_view(), name='home'),
url(r'^(?P\d+)/$', views.DetailView.as_view(), name='detail'),
+ url(r'^(?P\d+)/$', views.MineralDetailView.as_view(), name='mineral_detail'),
url(r'^media/(?P.*)$', 'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT}),
)
diff --git a/three_d_viewer/views.py b/three_d_viewer/views.py
index 9b9d0b0..e9ab259 100644
--- a/three_d_viewer/views.py
+++ b/three_d_viewer/views.py
@@ -5,7 +5,7 @@ Define the views for the Django MVC
from django import template
from django.views import generic
-from three_d_viewer.models import Sample, Category
+from three_d_viewer.models import Sample, Category, Mineral
register = template.Library()
@@ -19,7 +19,7 @@ class HomeView(generic.ListView):
def get_context_data(self, **kwargs):
context = super(HomeView, self).get_context_data(**kwargs)
- context['active_samples'] = Sample.objects.filter(active=True).order_by('name')
+ context['active_samples'] = Sample.objects.select_subclasses(Mineral).filter(active=True).order_by('name')
context['parent_categories'] = Category.objects.filter(parent=None). \
filter(active=True).order_by('name')
return context
@@ -37,7 +37,15 @@ class DetailView(generic.DetailView):
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
- context['active_samples'] = Sample.objects.filter(active=True).order_by('name')
+ context['active_samples'] = Sample.objects.select_subclasses(Mineral).filter(active=True).order_by('name')
context['parent_categories'] = Category.objects.filter(parent=None). \
filter(active=True).order_by('name')
return context
+
+class MineralDetailView(DetailView):
+ """
+ Add extra functionality for mineral details
+ """
+
+ model = Mineral
+ template_name = 'three_d_viewer/mineral_detail.html'
\ No newline at end of file