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