From 9a255298fcca3811aec467592487fdd6fba2a4d1 Mon Sep 17 00:00:00 2001 From: Zane Adickes Date: Mon, 6 Apr 2015 00:27:59 -0400 Subject: [PATCH] More Models MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Whole bunch of modelin’ goin’ on around here --- data/v2/build.py | 264 ++++++++++++++++-- pokemon_v2/admin.py | 12 + pokemon_v2/migrations/0001_initial.py | 81 ------ ...403_0536.py => 0002_auto_20150405_2102.py} | 6 +- .../migrations/0003_auto_20150403_1259.py | 26 -- ...403_0533.py => 0003_auto_20150405_2109.py} | 8 +- .../migrations/0004_auto_20150405_2112.py | 24 ++ .../0005_generation_generationname.py | 38 +++ .../migrations/0006_auto_20150406_0336.py | 162 +++++++++++ .../0007_type_typegameindex_typename.py | 53 ++++ pokemon_v2/migrations/0008_typeefficacy.py | 26 ++ pokemon_v2/models.py | 177 ++++++++++-- 12 files changed, 719 insertions(+), 158 deletions(-) delete mode 100644 pokemon_v2/migrations/0001_initial.py rename pokemon_v2/migrations/{0002_auto_20150403_0536.py => 0002_auto_20150405_2102.py} (63%) delete mode 100644 pokemon_v2/migrations/0003_auto_20150403_1259.py rename pokemon_v2/migrations/{0003_auto_20150403_0533.py => 0003_auto_20150405_2109.py} (54%) create mode 100644 pokemon_v2/migrations/0004_auto_20150405_2112.py create mode 100644 pokemon_v2/migrations/0005_generation_generationname.py create mode 100644 pokemon_v2/migrations/0006_auto_20150406_0336.py create mode 100644 pokemon_v2/migrations/0007_type_typegameindex_typename.py create mode 100644 pokemon_v2/migrations/0008_typeefficacy.py diff --git a/data/v2/build.py b/data/v2/build.py index 345e3f4b..00b51ce3 100644 --- a/data/v2/build.py +++ b/data/v2/build.py @@ -3,38 +3,268 @@ import os from pokemon_v2.models import * + +data_location = 'data/v2/csv/' + + +def loadData(fileName): + return csv.reader(open(data_location + fileName, 'rb'), delimiter=',') + +def clearTable(model): + model.objects.all().delete() + + +############## +# LANGUAGE # +############## + +clearTable(Language) +print str(Language) +data = loadData('languages.csv') + +for index, info in enumerate(data): + if index > 0: + + language = Language ( + id = int(info[0]), + iso639 = info[1], + iso3166 = info[2], + name = info[3], + official = bool(info[4]), + order = info[5], + ) + + language.save() + + +clearTable(LanguageName) +data = loadData('language_names.csv') + +for index, info in enumerate(data): + if index > 0: + + languageName = LanguageName ( + language = Language.objects.filter(id = int(info[0]))[0], + local_language_id = int(info[1]), + name = info[2] + ) + + languageName.save() + + +################ +# GENERATION # +################ + +clearTable(Generation) +data = loadData('generations.csv') + +for index, info in enumerate(data): + if index > 0: + + generation = Generation ( + id = int(info[0]), + main_region_id = info[1], + name = info[2] + ) + generation.save() + + +clearTable(GenerationName) +data = loadData('generation_names.csv') + +for index, info in enumerate(data): + if index > 0: + + generationName = GenerationName ( + generation = Generation.objects.filter(id = int(info[0]))[0], + language = Language.objects.filter(id = int(info[1]))[0], + name = info[2] + ) + generationName.save() + + + +############# +# VERSION # +############# + +clearTable(VersionGroup) +data = loadData('version_groups.csv') + +for index, info in enumerate(data): + if index > 0: + + versionGroup = VersionGroup ( + id = int(info[0]), + name = info[1], + generation = Generation.objects.filter(id = int(info[2]))[0], + order = int(info[3]) + ) + versionGroup.save() + + +clearTable(VersionGroupRegion) +data = loadData('version_group_regions.csv') + +for index, info in enumerate(data): + if index > 0: + + versionGroupRegion = VersionGroupRegion ( + version_group = VersionGroup.objects.filter(id = int(info[0]))[0], + region_id = int(info[1]) + ) + versionGroupRegion.save() + + +clearTable(Version) +data = loadData('versions.csv') + +for index, info in enumerate(data): + if index > 0: + + version = Version ( + id = int(info[0]), + version_group = VersionGroup.objects.filter(id = int(info[1]))[0], + name = info[2] + ) + version.save() + + +clearTable(VersionName) +data = loadData('version_names.csv') + +for index, info in enumerate(data): + if index > 0: + + versionName = VersionName ( + version = Version.objects.filter(id = int(info[0]))[0], + language = Language.objects.filter(id = int(info[1]))[0], + name = info[2] + ) + versionName.save() + + ############### # ABILITIES # ############### -# Names # - -file = open('data/v2/csv/ability_names.csv', 'rb') -data = csv.reader(file, delimiter=',') +clearTable(Ability) +data = loadData('abilities.csv') for index, info in enumerate(data): if index > 0: - abilityName = AbilityName( - ability_id=int(info[0]), - local_language_id=int(info[1]), - name=info[2] + ability = Ability ( + id = int(info[0]), + name = info[1], + generation = Generation.objects.filter(id = int(info[2]))[0], + is_main_series = bool(info[3]) + ) + ability.save() + + +clearTable(AbilityName) +data = loadData('ability_names.csv') + +for index, info in enumerate(data): + if index > 0: + + abilityName = AbilityName ( + ability = Ability.objects.filter(id = int(info[0]))[0], + language = Language.objects.filter(id = int(info[1]))[0], + name = info[2] ) abilityName.save() -# Descriptions # - -file = open('data/v2/csv/ability_prose.csv', 'rb') -data = csv.reader(file, delimiter=',') +clearTable(AbilityDescription) +data = loadData('ability_prose.csv') for index, info in enumerate(data): if index > 0: - abilityDesc = AbilityDescription( - ability_id=int(info[0]), - local_language_id=int(info[1]), - short_effect=info[2], - effect=info[3] + abilityDesc = AbilityDescription ( + ability = Ability.objects.filter(id = int(info[0]))[0], + language = Language.objects.filter(id = int(info[1]))[0], + short_effect = info[2], + effect = info[3] ) abilityDesc.save() + + +clearTable(AbilityFlavorText) +data = loadData('ability_flavor_text.csv') + +for index, info in enumerate(data): + if index > 0: + + abilityFlavorText = AbilityFlavorText ( + ability = Ability.objects.filter(id = int(info[0]))[0], + version_group = VersionGroup.objects.filter(id = int(info[1]))[0], + language = Language.objects.filter(id = int(info[2]))[0], + flavor_text = info[2] + ) + abilityFlavorText.save() + + + +########### +# TYPES # +########### + +clearTable(Type) +data = loadData('types.csv') + +for index, info in enumerate(data): + if index > 0: + + type = Type ( + id = int(info[0]), + name = info[1], + generation = Generation.objects.filter(id = int(info[2]))[0], + damage_class_id = int(info[3]) if info[3] else 0 + ) + type.save() + + +clearTable(TypeName) +data = loadData('type_names.csv') + +for index, info in enumerate(data): + if index > 0: + + typeName = TypeName ( + type = Type.objects.filter(id = int(info[0]))[0], + language = Language.objects.filter(id = int(info[1]))[0], + name = info[2] + ) + typeName.save() + + +clearTable(TypeGameIndex) +data = loadData('type_game_indices.csv') + +for index, info in enumerate(data): + if index > 0: + + typeGameIndex = TypeGameIndex ( + type = Type.objects.filter(id = int(info[0]))[0], + generation = Generation.objects.filter(id = int(info[1]))[0], + game_index = int(info[2]) + ) + typeGameIndex.save() + + +clearTable(TypeEfficacy) +data = loadData('type_efficacy.csv') + +for index, info in enumerate(data): + if index > 0: + + typeEfficacy = TypeEfficacy ( + damage_type_id = int(info[0]), + target_type_id = int(info[1]), + damage_factor = int(info[2]) + ) + typeEfficacy.save() diff --git a/pokemon_v2/admin.py b/pokemon_v2/admin.py index 1b28080c..0628b800 100644 --- a/pokemon_v2/admin.py +++ b/pokemon_v2/admin.py @@ -3,6 +3,18 @@ from django.contrib import admin from .models import * +admin.site.register(Language) +admin.site.register(LanguageName) + +admin.site.register(Generation) +admin.site.register(GenerationName) + +admin.site.register(Version) +admin.site.register(VersionName) +admin.site.register(VersionGroup) +admin.site.register(VersionGroupRegion) +admin.site.register(VersionGroupPokemonMoveMethod) + admin.site.register(Ability) admin.site.register(AbilityName) admin.site.register(AbilityDescription) diff --git a/pokemon_v2/migrations/0001_initial.py b/pokemon_v2/migrations/0001_initial.py deleted file mode 100644 index 1200b411..00000000 --- a/pokemon_v2/migrations/0001_initial.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Ability', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('generation', models.IntegerField()), - ('is_main_series', models.IntegerField()), - ('name', models.CharField(max_length=30)), - ], - options={ - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='AbilityDescription', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('ability_id', models.IntegerField()), - ('local_language_id', models.IntegerField()), - ('short_effect', models.CharField(max_length=200)), - ('effect', models.CharField(max_length=2000)), - ], - options={ - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='AbilityFlavorText', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('ability_id', models.IntegerField()), - ('version_group_id', models.IntegerField()), - ('language_id', models.IntegerField()), - ('flavor_text', models.CharField(max_length=100)), - ], - options={ - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='AbilityName', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('ability_id', models.IntegerField()), - ('local_language_id', models.IntegerField()), - ('name', models.CharField(max_length=30)), - ], - options={ - }, - bases=(models.Model,), - ), - migrations.AddField( - model_name='ability', - name='description', - field=models.OneToOneField(null=True, blank=True, to='pokemon_v2.AbilityDescription'), - preserve_default=True, - ), - migrations.AddField( - model_name='ability', - name='flavor_text', - field=models.ForeignKey(blank=True, to='pokemon_v2.AbilityFlavorText', null=True), - preserve_default=True, - ), - migrations.AddField( - model_name='ability', - name='names', - field=models.ForeignKey(blank=True, to='pokemon_v2.AbilityName', null=True), - preserve_default=True, - ), - ] diff --git a/pokemon_v2/migrations/0002_auto_20150403_0536.py b/pokemon_v2/migrations/0002_auto_20150405_2102.py similarity index 63% rename from pokemon_v2/migrations/0002_auto_20150403_0536.py rename to pokemon_v2/migrations/0002_auto_20150405_2102.py index 3cf624f7..536d28ff 100644 --- a/pokemon_v2/migrations/0002_auto_20150403_0536.py +++ b/pokemon_v2/migrations/0002_auto_20150405_2102.py @@ -12,9 +12,9 @@ class Migration(migrations.Migration): operations = [ migrations.AlterField( - model_name='abilitydescription', - name='effect', - field=models.CharField(max_length=2001), + model_name='languagename', + name='language_id', + field=models.ForeignKey(related_name='language_id', blank=True, to='pokemon_v2.Language', null=True), preserve_default=True, ), ] diff --git a/pokemon_v2/migrations/0003_auto_20150403_1259.py b/pokemon_v2/migrations/0003_auto_20150403_1259.py deleted file mode 100644 index 9371de22..00000000 --- a/pokemon_v2/migrations/0003_auto_20150403_1259.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('pokemon_v2', '0002_auto_20150403_0536'), - ] - - operations = [ - migrations.AlterField( - model_name='abilitydescription', - name='effect', - field=models.CharField(max_length=2000), - preserve_default=True, - ), - migrations.AlterField( - model_name='abilitydescription', - name='short_effect', - field=models.CharField(max_length=300), - preserve_default=True, - ), - ] diff --git a/pokemon_v2/migrations/0003_auto_20150403_0533.py b/pokemon_v2/migrations/0003_auto_20150405_2109.py similarity index 54% rename from pokemon_v2/migrations/0003_auto_20150403_0533.py rename to pokemon_v2/migrations/0003_auto_20150405_2109.py index e4c43d27..e04f0a74 100644 --- a/pokemon_v2/migrations/0003_auto_20150403_0533.py +++ b/pokemon_v2/migrations/0003_auto_20150405_2109.py @@ -7,14 +7,14 @@ from django.db import models, migrations class Migration(migrations.Migration): dependencies = [ - ('pokemon_v2', '0002_auto_20150403_0522'), + ('pokemon_v2', '0002_auto_20150405_2102'), ] operations = [ migrations.AlterField( - model_name='abilitydescription', - name='effect', - field=models.CharField(max_length=2001), + model_name='languagename', + name='language_id', + field=models.ForeignKey(related_name='language', blank=True, to='pokemon_v2.Language', null=True), preserve_default=True, ), ] diff --git a/pokemon_v2/migrations/0004_auto_20150405_2112.py b/pokemon_v2/migrations/0004_auto_20150405_2112.py new file mode 100644 index 00000000..bf814da0 --- /dev/null +++ b/pokemon_v2/migrations/0004_auto_20150405_2112.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('pokemon_v2', '0003_auto_20150405_2109'), + ] + + operations = [ + migrations.RemoveField( + model_name='languagename', + name='language_id', + ), + migrations.AddField( + model_name='languagename', + name='language', + field=models.ForeignKey(blank=True, to='pokemon_v2.Language', null=True), + preserve_default=True, + ), + ] diff --git a/pokemon_v2/migrations/0005_generation_generationname.py b/pokemon_v2/migrations/0005_generation_generationname.py new file mode 100644 index 00000000..79637429 --- /dev/null +++ b/pokemon_v2/migrations/0005_generation_generationname.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('pokemon_v2', '0004_auto_20150405_2112'), + ] + + operations = [ + migrations.CreateModel( + name='Generation', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('main_region_id', models.IntegerField()), + ('name', models.CharField(max_length=30)), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='GenerationName', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('local_language_id', models.IntegerField()), + ('name', models.CharField(max_length=30)), + ('generation', models.ForeignKey(blank=True, to='pokemon_v2.Generation', null=True)), + ], + options={ + 'abstract': False, + }, + bases=(models.Model,), + ), + ] diff --git a/pokemon_v2/migrations/0006_auto_20150406_0336.py b/pokemon_v2/migrations/0006_auto_20150406_0336.py new file mode 100644 index 00000000..e97368da --- /dev/null +++ b/pokemon_v2/migrations/0006_auto_20150406_0336.py @@ -0,0 +1,162 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('pokemon_v2', '0005_generation_generationname'), + ] + + operations = [ + migrations.CreateModel( + name='Ability', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=30)), + ('is_main_series', models.BooleanField(default=False)), + ('generation', models.ForeignKey(blank=True, to='pokemon_v2.Generation', null=True)), + ], + options={ + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='AbilityDescription', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('short_effect', models.CharField(max_length=300)), + ('effect', models.CharField(max_length=2000)), + ('ability', models.ForeignKey(blank=True, to='pokemon_v2.Ability', null=True)), + ('language', models.ForeignKey(blank=True, to='pokemon_v2.Language', null=True)), + ], + options={ + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='AbilityFlavorText', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('flavor_text', models.CharField(max_length=100)), + ('ability', models.ForeignKey(blank=True, to='pokemon_v2.Ability', null=True)), + ('language', models.ForeignKey(blank=True, to='pokemon_v2.Language', null=True)), + ], + options={ + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='AbilityName', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=30)), + ('ability', models.ForeignKey(blank=True, to='pokemon_v2.Ability', null=True)), + ('language', models.ForeignKey(blank=True, to='pokemon_v2.Language', null=True)), + ], + options={ + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Version', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=30)), + ], + options={ + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='VersionGroup', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=30)), + ('order', models.IntegerField()), + ('generation', models.ForeignKey(blank=True, to='pokemon_v2.Generation', null=True)), + ], + options={ + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='VersionGroupPokemonMoveMethod', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('pokemon_move_method_id', models.IntegerField()), + ('version_group', models.ForeignKey(blank=True, to='pokemon_v2.VersionGroup', null=True)), + ], + options={ + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='VersionGroupRegion', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('region_id', models.IntegerField()), + ('version_group', models.ForeignKey(blank=True, to='pokemon_v2.VersionGroup', null=True)), + ], + options={ + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='VersionName', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=30)), + ('language', models.ForeignKey(blank=True, to='pokemon_v2.Language', null=True)), + ('version', models.ForeignKey(blank=True, to='pokemon_v2.Version', null=True)), + ], + options={ + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.AddField( + model_name='version', + name='version_group', + field=models.ForeignKey(blank=True, to='pokemon_v2.VersionGroup', null=True), + preserve_default=True, + ), + migrations.AddField( + model_name='abilityflavortext', + name='version_group', + field=models.ForeignKey(blank=True, to='pokemon_v2.VersionGroup', null=True), + preserve_default=True, + ), + migrations.RemoveField( + model_name='generationname', + name='local_language_id', + ), + migrations.AddField( + model_name='generationname', + name='language', + field=models.ForeignKey(blank=True, to='pokemon_v2.Language', null=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='language', + name='name', + field=models.CharField(max_length=30), + preserve_default=True, + ), + migrations.AlterField( + model_name='language', + name='official', + field=models.BooleanField(default=False), + preserve_default=True, + ), + ] diff --git a/pokemon_v2/migrations/0007_type_typegameindex_typename.py b/pokemon_v2/migrations/0007_type_typegameindex_typename.py new file mode 100644 index 00000000..248f37a4 --- /dev/null +++ b/pokemon_v2/migrations/0007_type_typegameindex_typename.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('pokemon_v2', '0006_auto_20150406_0336'), + ] + + operations = [ + migrations.CreateModel( + name='Type', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=30)), + ('damage_class_id', models.IntegerField()), + ('generation', models.ForeignKey(blank=True, to='pokemon_v2.Generation', null=True)), + ], + options={ + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='TypeGameIndex', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('game_index', models.IntegerField()), + ('generation', models.ForeignKey(blank=True, to='pokemon_v2.Generation', null=True)), + ('type', models.ForeignKey(blank=True, to='pokemon_v2.Type', null=True)), + ], + options={ + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='TypeName', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=30)), + ('language', models.ForeignKey(blank=True, to='pokemon_v2.Language', null=True)), + ('type', models.ForeignKey(blank=True, to='pokemon_v2.Type', null=True)), + ], + options={ + 'abstract': False, + }, + bases=(models.Model,), + ), + ] diff --git a/pokemon_v2/migrations/0008_typeefficacy.py b/pokemon_v2/migrations/0008_typeefficacy.py new file mode 100644 index 00000000..a7c8f810 --- /dev/null +++ b/pokemon_v2/migrations/0008_typeefficacy.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('pokemon_v2', '0007_type_typegameindex_typename'), + ] + + operations = [ + migrations.CreateModel( + name='TypeEfficacy', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('damage_type_id', models.IntegerField()), + ('target_type_id', models.IntegerField()), + ('damage_factor', models.IntegerField()), + ], + options={ + }, + bases=(models.Model,), + ), + ] diff --git a/pokemon_v2/models.py b/pokemon_v2/models.py index a7857a72..9044fdb2 100644 --- a/pokemon_v2/models.py +++ b/pokemon_v2/models.py @@ -2,51 +2,174 @@ from __future__ import unicode_literals from django.db import models -class AbilityDescription(models.Model): +##################### +# ABSTRACT MODELS # +##################### - ability_id = models.IntegerField() +class HasLanguage(models.Model): + + language = models.ForeignKey('Language', blank = True, null = True) + + class Meta: + abstract = True + +class HasName(models.Model): + + name = models.CharField(max_length=30) + + class Meta: + abstract = True + +class IsName(HasLanguage, HasName): + + class Meta: + abstract = True + +class HasOrder(models.Model): + + order = models.IntegerField() + + class Meta: + abstract = True + +class HasAbility(models.Model): + + ability = models.ForeignKey('Ability', blank=True, null=True) + + class Meta: + abstract = True + +class HasGeneration(models.Model): + + generation = models.ForeignKey('Generation', blank=True, null=True) + + class Meta: + abstract = True + +class HasVersionGroup(models.Model): + + version_group = models.ForeignKey('VersionGroup', blank=True, null=True) + + class Meta: + abstract = True + +class HasType(models.Model): + + type = models.ForeignKey('Type', blank=True, null=True) + + class Meta: + abstract = True + + + +#################### +# VERSION MODELS # +#################### + +class Version(HasName, HasVersionGroup): + pass + +class VersionName(IsName): + + version = models.ForeignKey('Version', blank=True, null=True) + + +class VersionGroup(HasName, HasGeneration, HasOrder): + pass + + +class VersionGroupRegion(HasVersionGroup): + + region_id = models.IntegerField() + + +class VersionGroupPokemonMoveMethod(HasVersionGroup): + + pokemon_move_method_id = models.IntegerField() + + + +##################### +# LANGUAGE MODELS # +##################### + +class Language(HasName, HasOrder): + + iso639 = models.CharField(max_length=2) + + iso3166 = models.CharField(max_length=2) + + official = models.BooleanField(default = False) + + +class LanguageName(IsName): local_language_id = models.IntegerField() + + +####################### +# GENERATION MODELS # +####################### + +class Generation(HasName): + + main_region_id = models.IntegerField() + + +class GenerationName(IsName, HasGeneration): + pass + + + +#################### +# ABILITY MODELS # +#################### + +class Ability(HasName, HasGeneration): + + is_main_series = models.BooleanField(default = False) + + +class AbilityDescription(HasLanguage, HasAbility): + short_effect = models.CharField(max_length=300) effect = models.CharField(max_length=2000) -class AbilityFlavorText(models.Model): - - ability_id = models.IntegerField() - - version_group_id = models.IntegerField() - - language_id = models.IntegerField() +class AbilityFlavorText(HasLanguage, HasAbility, HasVersionGroup): flavor_text = models.CharField(max_length=100) -class AbilityName(models.Model): - - ability_id = models.IntegerField() - - local_language_id = models.IntegerField() - - name = models.CharField(max_length=30) - - def __str__(self): - - return self.name +class AbilityName(IsName, HasAbility): + pass -class Ability(models.Model): - flavor_text = models.ForeignKey(AbilityFlavorText, blank=True, null=True) +################# +# TYPE MODELS # +################# - generation = models.IntegerField() +class Type(HasName, HasGeneration): - is_main_series = models.IntegerField() + damage_class_id = models.IntegerField(blank = True, null = True) - description = models.OneToOneField(AbilityDescription, blank=True, null=True) - name = models.CharField(max_length=30) +class TypeName(IsName, HasType): + pass - names = models.ForeignKey(AbilityName, blank=True, null=True) + +class TypeGameIndex(HasType, HasGeneration): + + game_index = models.IntegerField() + + +class TypeEfficacy(models.Model): + + damage_type_id = models.IntegerField() + + target_type_id = models.IntegerField() + + damage_factor = models.IntegerField()