diff --git a/.idea/workspace.xml b/.idea/workspace.xml index dbcce07..7391340 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,23 +2,8 @@ - - - - - - - - - - - - - - - @@ -43,41 +28,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -86,7 +40,7 @@ - + @@ -95,7 +49,7 @@ - + @@ -104,25 +58,34 @@ - + - + - + - + + + + + + + + + + - + @@ -130,10 +93,28 @@ + + + + + + + + + + + + + + + + + + - + @@ -146,7 +127,7 @@ - + @@ -155,7 +136,7 @@ - + @@ -191,11 +172,11 @@ @@ -231,7 +212,6 @@ - @@ -281,10 +261,6 @@ @@ -296,41 +272,7 @@ - - - - - - - - - - - - - - - - - - - @@ -348,15 +290,7 @@ - - - - - @@ -370,7 +304,7 @@ + @@ -392,6 +327,7 @@ + - + - - + - + - + + - + @@ -700,10 +636,103 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -713,16 +742,12 @@ - - - + - - - + @@ -734,9 +759,7 @@ - - - + @@ -793,9 +816,7 @@ - - - + @@ -814,24 +835,18 @@ - - - + - - - + - - - + @@ -844,85 +859,104 @@ - + - - - - + + - + - + - + - + - + - + - + - + - + + + + + + + + - + + + + + + + + + + + + + + + diff --git a/db.sqlite3 b/db.sqlite3 index b6ecf4a..a97a3a0 100644 Binary files a/db.sqlite3 and b/db.sqlite3 differ diff --git a/three_d_viewer/migrations/0008_auto__add_field_sample_viewed_count.py b/three_d_viewer/migrations/0008_auto__add_field_sample_viewed_count.py new file mode 100644 index 0000000..7a8a224 --- /dev/null +++ b/three_d_viewer/migrations/0008_auto__add_field_sample_viewed_count.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'Sample.viewed_count' + db.add_column(u'three_d_viewer_sample', 'viewed_count', + self.gf('django.db.models.fields.IntegerField')(default=0), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'Sample.viewed_count' + db.delete_column(u'three_d_viewer_sample', 'viewed_count') + + + models = { + u'three_d_viewer.answer': { + 'Meta': {'object_name': 'Answer'}, + 'correct': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': u"orm['three_d_viewer.Question']"}), + 'text': ('django.db.models.fields.CharField', [], {'max_length': '2000'}) + }, + u'three_d_viewer.category': { + 'Meta': {'object_name': 'Category'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['three_d_viewer.Category']"}) + }, + u'three_d_viewer.glossaryentry': { + 'Meta': {'object_name': 'GlossaryEntry'}, + 'definition': ('django.db.models.fields.CharField', [], {'max_length': '2000'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}) + }, + u'three_d_viewer.mineral': { + 'Meta': {'object_name': 'Mineral', '_ormbases': [u'three_d_viewer.Sample']}, + 'chemical_formula': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'cleavage_fracture': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'colour': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'crystallography': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'habit': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'blank': 'True'}), + 'hardness': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '3', 'decimal_places': '2', 'blank': 'True'}), + 'identifying_features': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'blank': 'True'}), + 'lustre': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'occurance': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'blank': 'True'}), + u'sample_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['three_d_viewer.Sample']", 'unique': 'True', 'primary_key': 'True'}), + 'specific_gravity': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '4', 'decimal_places': '2', 'blank': 'True'}), + 'streak': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) + }, + u'three_d_viewer.question': { + 'Meta': {'object_name': 'Question'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'sample': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questions'", 'to': u"orm['three_d_viewer.Sample']"}), + 'text': ('django.db.models.fields.CharField', [], {'max_length': '2000'}) + }, + u'three_d_viewer.sample': { + 'Meta': {'object_name': 'Sample'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '2000', 'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model_filename': ('django.db.models.fields.CharField', [], {'max_length': '1000'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'samples'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['three_d_viewer.Category']"}), + 'viewed_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}) + } + } + + complete_apps = ['three_d_viewer'] \ No newline at end of file diff --git a/three_d_viewer/views.py b/three_d_viewer/views.py index f619bd3..f2272f9 100644 --- a/three_d_viewer/views.py +++ b/three_d_viewer/views.py @@ -63,6 +63,12 @@ class MineralDetailView(generic.DetailView): context['active_samples'] = sorted(result, key=attrgetter('name')) return context + def get_object(self, queryset=None): + object = super(MineralDetailView, self).get_object() + object.viewed_count += 1 + object.save() + return object + class RockPracticeView(generic.ListView): model = Sample template_name = 'three_d_viewer/rock_practice.html' @@ -101,6 +107,12 @@ class RockDetailView(generic.DetailView): context['active_samples'] = sorted(result, key=attrgetter('name')) return context + def get_object(self, queryset=None): + object = super(RockDetailView, self).get_object() + object.viewed_count += 1 + object.save() + return object + class FossilPracticeView(generic.ListView): model = Sample template_name = 'three_d_viewer/fossil_practice.html' @@ -138,6 +150,12 @@ class FossilDetailView(generic.DetailView): context['active_samples'] = sorted(result, key=attrgetter('name')) return context + + def get_object(self, queryset=None): + object = super(FossilDetailView, self).get_object() + object.viewed_count += 1 + object.save() + return object class GlossaryView(generic.ListView): model = GlossaryEntry @@ -145,5 +163,5 @@ class GlossaryView(generic.ListView): def get_context_data(self, **kwargs): context = super(GlossaryView, self).get_context_data(**kwargs) - context['entries'] = GlossaryEntry.objects.all() + context['entries'] = GlossaryEntry.objects.all().order_by("name") return context