From ad5ad013078dfddec4b6b903f32af3282672f33c Mon Sep 17 00:00:00 2001 From: Shane Frischkorn Date: Mon, 20 Jan 2014 23:28:08 +1000 Subject: [PATCH] Add a mineral model to store details of minerals --- db.sqlite3 | Bin 159744 -> 167936 bytes three_d_viewer/admin.py | 3 +- .../migrations/0004_auto__add_mineral.py | 81 ++++++++++++++++++ ...fic_gravity__chg_field_mineral_hardness.py | 73 ++++++++++++++++ three_d_viewer/models.py | 17 ++++ 5 files changed, 173 insertions(+), 1 deletion(-) create mode 100644 three_d_viewer/migrations/0004_auto__add_mineral.py create mode 100644 three_d_viewer/migrations/0005_auto__chg_field_mineral_specific_gravity__chg_field_mineral_hardness.py diff --git a/db.sqlite3 b/db.sqlite3 index 6d6f61dde7316e384e6845b4718eca2bc1d861dc..de1f1b3e0f08d79fae6c8bac67ff9d8bae804cad 100644 GIT binary patch delta 2300 zcmd^BTW=Fb6y9Tdy|&}su~9-oLc+$mI94v$8#_({N-!ZvDYq{_vtGw0j_vqD za7zV2RH;DLV>mj6{!zxt;o=av_ zNqaxJ&2UP)ui8u!Hn4OELDnM$q?p7G`GZnK2+-LfpBq+JFW^L<5FB`j%MKsl*ea5! zg^Dzv;PEVw;qM2C%1V-03+AlGWTN<0Qfb!DPEu@_nx^!3^s~ur?3jLiz6vbxh!N)O z5y+}h$vugT+d z>$RITTd6;Bl;)_(oA=bLbtG)}^-FjMoJuQxlhV&*u3VwOYfB6U_Lu23}??mC7D?9HSu(n(Uot<;x7r zlykvddlJL`uy;>55f}+K4#fM1Tf$*mB=*8U!ZR{}QYi#I24%Zqi%hZbqDqlaY{6T- z2+!5EYY7*Cu>fe!YFmh5V=L!uwK^J{_Oy`-nzOm3XiQn#mP2copt)8@ODkt0$PbkZQs*y2iCMKzOZ#7vixH&x^hR-s_hF3u(+p z!;2U0_y_N&woN>8mq+RjRHJF0%~<#0`SD z0rwP6<yjB9F|4VLJIP(+8*d{@JKW37Svt0Ny4;7b?e|jNrp|HI}RH8%yBp=7frzxx#lRmCBHTaZ?FWR=+3Im>?@a3^v{a= z!oEHj>yUR&z#2==7(N<`$9#NH8sV2F--2E8sR^ht=HMo_#uSZ3Bw=v!wz`O7O+KOD zAIp6Q;#edbhhde5HHo1>C>}{mXx0=JhQa}f562?B{MiX8Hi!X9*ewi5yf-3`K2lil5TvFMYA{Gt%xy`jiZJRo3vVLraT6a^V49@JX0 zL9EZXz3jh(D1UMsO8;lhO8tETNb5=s(xk7n^XP4K5J_k=G9wN16RrYZGwa&2wPR_) z=bD>w?J$%nU9g-udmk8N^LH?-Y-i5O)HPhGnHlCR=HwWCx|%53Gksg?!cEu!7&RtS zzok)!m@$lkEQ-#c=(g14Uoh@c(7$8RS9B3`j3_DxEm1HW7x2x{AjXE&>8hT}>s8z> k*QI}12m?W&UoiYSGUn4XO=MmupmzBCI6Qp|9e&UF5BlS_kpKVy delta 892 zcmZ9Ke`r%z6vyAmOLCK!_wGru%&fDCNzI6ZR$tQino8YT#bRNx{$T&wy_&~b$YPt; zuAmNsZpfe*eX!G7CRITYhPb`Chaf8P2Z(MH21ACrZZI~7a~q>zLBv4`?kD!n@C5mQQo$r3$Q zNWCUo4K3kA(bkqsrX`b2sF_u&wrb_dL+s(ajE3qOhih?M* zBknDp5zj?$uXi7-vbyiSzbn84UGipmN_j{5l)t5{iDsCx*Gngu*%YZWMi z^%?Jlh4571i%tlxkPAXsoDkgCJauo6_ZRk&&+nV?=l%DjcctG0JCybOZ+S0|x|fL) zuDUBpY7K7Frb*b%7bRJ=rwyv@gXN+zPURXbisv$FQPuTrqXQMg=qvV(4I1womA(=E zy`hqkqK(rKqun)N^f5WnjT%VOkX|v$qkV(LCTb)&rc}q5uxMKw?8Q;NpJoZ7^fSTB z&_wEyXBx^)!BYD66VT{U4T3O6$}~)i)%a_aAXrQ{4?~Ei55tJbTo3I#AHY(u&m4pS zkD}ZYv=^I)U%aZb!A)OJ!c~eB%%H>W^8cIk|7(&CO~DWLc>;v5X27jR7^W96t>bar zhX!_I8hy_H{lgpI$f}vAglDz?2+y}?G)?1_{t@notNCSOvkn*`bq%*KKY&hfY9_J2 Yp4LL#HXp-*E@$~S1-Kp9;F?Q50Wa?f?f?J) 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