diff --git a/db.sqlite3 b/db.sqlite3 index 6d6f61d..de1f1b3 100644 Binary files a/db.sqlite3 and b/db.sqlite3 differ diff --git a/three_d_viewer/admin.py b/three_d_viewer/admin.py index 04a9482..bf974a8 100644 --- a/three_d_viewer/admin.py +++ b/three_d_viewer/admin.py @@ -3,9 +3,10 @@ Configuration for the Django admin site """ from django.contrib import admin -from three_d_viewer.models import Category, Sample, Question, Answer +from three_d_viewer.models import Category, Sample, Question, Answer, Mineral admin.site.register(Category) admin.site.register(Sample) admin.site.register(Question) admin.site.register(Answer) +admin.site.register(Mineral) diff --git a/three_d_viewer/migrations/0004_auto__add_mineral.py b/three_d_viewer/migrations/0004_auto__add_mineral.py new file mode 100644 index 0000000..64eedbb --- /dev/null +++ b/three_d_viewer/migrations/0004_auto__add_mineral.py @@ -0,0 +1,81 @@ +# -*- 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 model 'Mineral' + db.create_table(u'three_d_viewer_mineral', ( + (u'sample_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['three_d_viewer.Sample'], unique=True, primary_key=True)), + ('chemical_formula', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('hardness', self.gf('django.db.models.fields.DecimalField')(max_digits=3, decimal_places=2)), + ('specific_gravity', self.gf('django.db.models.fields.DecimalField')(max_digits=4, decimal_places=2)), + ('cleavage_fracture', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('lustre', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('colour', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('streak', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('habit', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('crystallography', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('identifying_features', self.gf('django.db.models.fields.CharField')(max_length=1000)), + ('occurance', self.gf('django.db.models.fields.CharField')(max_length=1000)), + )) + db.send_create_signal(u'three_d_viewer', ['Mineral']) + + + def backwards(self, orm): + # Deleting model 'Mineral' + db.delete_table(u'three_d_viewer_mineral') + + + 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.mineral': { + 'Meta': {'object_name': 'Mineral', '_ormbases': [u'three_d_viewer.Sample']}, + 'chemical_formula': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'cleavage_fracture': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'colour': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'crystallography': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'habit': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'hardness': ('django.db.models.fields.DecimalField', [], {'max_digits': '3', 'decimal_places': '2'}), + 'identifying_features': ('django.db.models.fields.CharField', [], {'max_length': '1000'}), + 'lustre': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'occurance': ('django.db.models.fields.CharField', [], {'max_length': '1000'}), + 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', [], {'max_digits': '4', 'decimal_places': '2'}), + 'streak': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 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']"}) + } + } + + complete_apps = ['three_d_viewer'] \ No newline at end of file diff --git a/three_d_viewer/migrations/0005_auto__chg_field_mineral_specific_gravity__chg_field_mineral_hardness.py b/three_d_viewer/migrations/0005_auto__chg_field_mineral_specific_gravity__chg_field_mineral_hardness.py new file mode 100644 index 0000000..8bdac41 --- /dev/null +++ b/three_d_viewer/migrations/0005_auto__chg_field_mineral_specific_gravity__chg_field_mineral_hardness.py @@ -0,0 +1,73 @@ +# -*- 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): + + # Changing field 'Mineral.specific_gravity' + db.alter_column(u'three_d_viewer_mineral', 'specific_gravity', self.gf('django.db.models.fields.DecimalField')(null=True, max_digits=4, decimal_places=2)) + + # Changing field 'Mineral.hardness' + db.alter_column(u'three_d_viewer_mineral', 'hardness', self.gf('django.db.models.fields.DecimalField')(null=True, max_digits=3, decimal_places=2)) + + def backwards(self, orm): + + # Changing field 'Mineral.specific_gravity' + db.alter_column(u'three_d_viewer_mineral', 'specific_gravity', self.gf('django.db.models.fields.DecimalField')(default=0, max_digits=4, decimal_places=2)) + + # Changing field 'Mineral.hardness' + db.alter_column(u'three_d_viewer_mineral', 'hardness', self.gf('django.db.models.fields.DecimalField')(default=0, max_digits=3, decimal_places=2)) + + 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.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': '100', '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']"}) + } + } + + complete_apps = ['three_d_viewer'] \ No newline at end of file diff --git a/three_d_viewer/models.py b/three_d_viewer/models.py index 58da823..0b6f24c 100644 --- a/three_d_viewer/models.py +++ b/three_d_viewer/models.py @@ -46,6 +46,23 @@ class Sample(CommonInfo): related_name="samples") +class Mineral(Sample): + """ + Extending the Sample class to add details specific to minerals + """ + chemical_formula = models.CharField(max_length=100, blank=True) + hardness = models.DecimalField(max_digits=3, decimal_places=2, blank=True, null=True) + specific_gravity = models.DecimalField(max_digits=4, decimal_places=2, blank=True, null=True) + cleavage_fracture = models.CharField(max_length=100, blank=True) + lustre = models.CharField(max_length=100, blank=True) + colour = models.CharField(max_length=100, blank=True) + streak = models.CharField(max_length=100, blank=True) + habit = models.CharField(max_length=100, blank=True) + crystallography = models.CharField(max_length=100, blank=True) + identifying_features = models.CharField(max_length=1000, blank=True) + occurance = models.CharField(max_length=1000, blank=True) + + class Question(models.Model): """ The definition of a multiple choice question, associated with a Sample