From c4a2fb5e7c476a8361aa039cc986c3a0ddabf730 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Herv=C3=A9=20=20MENAGER?= <herve.menager@pasteur.fr>
Date: Wed, 17 May 2017 22:26:44 +0200
Subject: [PATCH] rename foreign key fields to remove "_id" suffixes

closes #35
---
 ippisite/db.sqlite3                           | Bin 536576 -> 569344 bytes
 ippisite/ippidb/admin.py                      |   8 +-
 ippisite/ippidb/forms.py                      |   4 +-
 .../migrations/0009_auto_20170517_2020.py     | 196 ++++++++++++++++++
 ippisite/ippidb/models.py                     |  60 +++---
 5 files changed, 232 insertions(+), 36 deletions(-)
 create mode 100644 ippisite/ippidb/migrations/0009_auto_20170517_2020.py

diff --git a/ippisite/db.sqlite3 b/ippisite/db.sqlite3
index 418ffe91ef59f6e2db941d723da526c109b5b5f5..d0f0db2af8cd80bce56b7148c24a74b09675dec6 100644
GIT binary patch
delta 5307
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

delta 5317
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
R;AwQX@$wd<lfSFs{|AP?2c!T1

diff --git a/ippisite/ippidb/admin.py b/ippisite/ippidb/admin.py
index 516d2719..dc4f162a 100644
--- a/ippisite/ippidb/admin.py
+++ b/ippisite/ippidb/admin.py
@@ -20,13 +20,13 @@ class DomainAdmin(admin.ModelAdmin):
 
 @admin.register(ProteinDomainBoundComplex)
 class ProteinDomainBoundComplexAdmin(admin.ModelAdmin):
-    list_display = ('protein_id', 'domain_id', 'ppc_copy_nb', 'ppp_copy_nb_per_p', 'pockets_nb')
-    list_display_links = ('protein_id', 'domain_id', 'ppc_copy_nb', 'ppp_copy_nb_per_p', 'pockets_nb')
+    list_display = ('protein', 'domain', 'ppc_copy_nb', 'ppp_copy_nb_per_p', 'pockets_nb')
+    list_display_links = ('protein', 'domain', 'ppc_copy_nb', 'ppp_copy_nb_per_p', 'pockets_nb')
 
 @admin.register(ProteinDomainPartnerComplex)
 class ProteinDomainPartnerComplexAdmin(admin.ModelAdmin):
-    list_display = ('protein_id', 'domain_id', 'ppc_copy_nb')
-    list_display_links = ('protein_id', 'domain_id', 'ppc_copy_nb')
+    list_display = ('protein', 'domain', 'ppc_copy_nb')
+    list_display_links = ('protein', 'domain', 'ppc_copy_nb')
 
 @admin.register(Symmetry)
 class Symmetry(admin.ModelAdmin):
diff --git a/ippisite/ippidb/forms.py b/ippisite/ippidb/forms.py
index 6c83082f..d7364dac 100644
--- a/ippisite/ippidb/forms.py
+++ b/ippisite/ippidb/forms.py
@@ -22,10 +22,10 @@ class ProteinForm(ModelForm):
 class ProteinDomainComplexForm(ModelForm):
 	class Meta:
 		model = ProteinDomainComplex
-		fields = ['protein_id', 'domain_id', 'ppc_copy_nb']
+		fields = ['protein', 'domain', 'ppc_copy_nb']
 
 
 class PpiForm(ModelForm):
 	class Meta:
 		model = Ppi
-		fields = ['complex_id', 'cc_nb', 'pdb_id', 'symmetry_id']
+		fields = ['complex', 'cc_nb', 'pdb_id', 'symmetry']
diff --git a/ippisite/ippidb/migrations/0009_auto_20170517_2020.py b/ippisite/ippidb/migrations/0009_auto_20170517_2020.py
new file mode 100644
index 00000000..51fbffd8
--- /dev/null
+++ b/ippisite/ippidb/migrations/0009_auto_20170517_2020.py
@@ -0,0 +1,196 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.5 on 2017-05-17 20:20
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('ippidb', '0008_auto_20170329_1441'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='cmpdaction',
+            old_name='complex_id',
+            new_name='complex',
+        ),
+        migrations.RenameField(
+            model_name='cmpdaction',
+            old_name='compound_id',
+            new_name='compound',
+        ),
+        migrations.RenameField(
+            model_name='cmpdaction',
+            old_name='ppi_id',
+            new_name='ppi',
+        ),
+        migrations.RenameField(
+            model_name='compound',
+            old_name='mddr_compound_id',
+            new_name='mddr_compound',
+        ),
+        migrations.RenameField(
+            model_name='compoundactivityresult',
+            old_name='activity_type_id',
+            new_name='activity_type',
+        ),
+        migrations.RenameField(
+            model_name='compoundactivityresult',
+            old_name='compound_id',
+            new_name='compound',
+        ),
+        migrations.RenameField(
+            model_name='compoundactivityresult',
+            old_name='test_activity_description_id',
+            new_name='test_activity_description',
+        ),
+        migrations.RenameField(
+            model_name='compoundcytotoxicityresult',
+            old_name='compound_id',
+            new_name='compound',
+        ),
+        migrations.RenameField(
+            model_name='compoundcytotoxicityresult',
+            old_name='test_cytotoxicity_description_id',
+            new_name='test_cytotoxicity_description',
+        ),
+        migrations.RenameField(
+            model_name='compoundpkresult',
+            old_name='compound_id',
+            new_name='compound',
+        ),
+        migrations.RenameField(
+            model_name='compoundpkresult',
+            old_name='test_pk_description_id',
+            new_name='test_pk_description',
+        ),
+        migrations.RenameField(
+            model_name='disease',
+            old_name='ppi_id',
+            new_name='ppi',
+        ),
+        migrations.RenameField(
+            model_name='mddrcompoundactivityclass',
+            old_name='mddr_compound_id',
+            new_name='mddr_compound',
+        ),
+        migrations.RenameField(
+            model_name='ppi',
+            old_name='complex_id',
+            new_name='complex',
+        ),
+        migrations.RenameField(
+            model_name='ppi',
+            old_name='symmetry_id',
+            new_name='symmetry',
+        ),
+        migrations.RenameField(
+            model_name='proteindomaincomplex',
+            old_name='domain_id',
+            new_name='domain',
+        ),
+        migrations.RenameField(
+            model_name='proteindomaincomplex',
+            old_name='protein_id',
+            new_name='protein',
+        ),
+        migrations.RenameField(
+            model_name='refcompoundbiblio',
+            old_name='bibliography_id',
+            new_name='bibliography',
+        ),
+        migrations.RenameField(
+            model_name='refcompoundbiblio',
+            old_name='compound_id',
+            new_name='compound',
+        ),
+        migrations.RenameField(
+            model_name='testactivitydescription',
+            old_name='biblio_id',
+            new_name='biblio',
+        ),
+        migrations.RenameField(
+            model_name='testactivitydescription',
+            old_name='complex_id',
+            new_name='complex',
+        ),
+        migrations.RenameField(
+            model_name='testactivitydescription',
+            old_name='ppi_id',
+            new_name='ppi',
+        ),
+        migrations.RenameField(
+            model_name='testcytotoxdescription',
+            old_name='biblio_id',
+            new_name='biblio',
+        ),
+        migrations.RenameField(
+            model_name='testpkdescription',
+            old_name='biblio_id',
+            new_name='biblio',
+        ),
+        migrations.RemoveField(
+            model_name='compound',
+            name='dh_Petitjean',
+        ),
+        migrations.RemoveField(
+            model_name='compound',
+            name='diam_graph_non_h_petitjean',
+        ),
+        migrations.RemoveField(
+            model_name='compound',
+            name='g_petitjean',
+        ),
+        migrations.RemoveField(
+            model_name='compound',
+            name='ig_petitjean',
+        ),
+        migrations.RemoveField(
+            model_name='compound',
+            name='radius_graph_non_h_petitjean',
+        ),
+        migrations.RemoveField(
+            model_name='compound',
+            name='surface_vdw_petitjean',
+        ),
+        migrations.RemoveField(
+            model_name='compound',
+            name='thickness_petitjean',
+        ),
+        migrations.RemoveField(
+            model_name='compound',
+            name='vol_vdw_petitjean',
+        ),
+        migrations.AlterField(
+            model_name='compound',
+            name='canonical_smile',
+            field=models.CharField(max_length=500, unique=True, verbose_name='Canonical Smile'),
+        ),
+        migrations.AlterUniqueTogether(
+            name='cmpdaction',
+            unique_together=set([('complex', 'compound', 'pdb_id')]),
+        ),
+        migrations.AlterUniqueTogether(
+            name='compoundactivityresult',
+            unique_together=set([('compound', 'test_activity_description', 'activity_type')]),
+        ),
+        migrations.AlterUniqueTogether(
+            name='compoundcytotoxicityresult',
+            unique_together=set([('compound', 'test_cytotoxicity_description')]),
+        ),
+        migrations.AlterUniqueTogether(
+            name='compoundpkresult',
+            unique_together=set([('compound', 'test_pk_description')]),
+        ),
+        migrations.AlterUniqueTogether(
+            name='mddrcompoundactivityclass',
+            unique_together=set([('mddr_compound', 'activity_class')]),
+        ),
+        migrations.AlterUniqueTogether(
+            name='refcompoundbiblio',
+            unique_together=set([('compound', 'bibliography')]),
+        ),
+    ]
diff --git a/ippisite/ippidb/models.py b/ippisite/ippidb/models.py
index a5417a44..226227f7 100644
--- a/ippisite/ippidb/models.py
+++ b/ippisite/ippidb/models.py
@@ -119,8 +119,8 @@ class Domain(models.Model):
         return '{} ({}-{})'.format(self.pfam_acc, self.pfam_id, self.pfam_description)
 
 class ProteinDomainComplex(models.Model):
-    protein_id = models.ForeignKey('Protein')
-    domain_id = models.ForeignKey('Domain')
+    protein = models.ForeignKey('Protein')
+    domain = models.ForeignKey('Domain')
     ppc_copy_nb = models.IntegerField('Number of copies of the protein in the complex')
     
     class Meta:
@@ -151,13 +151,13 @@ class Symmetry(models.Model):
 
 class Ppi(models.Model):
     ppi_id = models.IntegerField('PPI identifier')
-    complex_id = models.ForeignKey(ProteinDomainComplex)
+    complex = models.ForeignKey(ProteinDomainComplex)
     cc_nb = models.IntegerField('Number of copies of the complex in the PPI', default=1)
     pdb_id = models.CharField('PDB ID', max_length=4)
-    symmetry_id = models.ForeignKey(Symmetry)
+    symmetry = models.ForeignKey(Symmetry)
 
 class Disease(models.Model):
-    ppi_id = models.ForeignKey(Ppi)
+    ppi = models.ForeignKey(Ppi)
     disease_name = models.CharField('Disease', max_length=30) # is there any database/nomenclature for diseases?
 
 
@@ -212,7 +212,7 @@ class Compound(models.Model):
     chemspider_id = models.CharField('Chemspider ID', unique=True, max_length=10, blank=True, null=True)  
     chembl_id = models.CharField('Chembl ID', unique=True, max_length=30, blank=True, null=True)  
     iupac_name = models.CharField('IUPAC name', unique=True, max_length=255, blank=True, null=True)  
-    mddr_compound_id = models.ForeignKey('MDDRCompoundImport', blank=True, null=True)  
+    mddr_compound = models.ForeignKey('MDDRCompoundImport', blank=True, null=True)  
 
 
 class MDDRCompoundImport(models.Model):
@@ -231,11 +231,11 @@ class MDDRCompoundImport(models.Model):
 
 
 class MDDRCompoundActivityClass(models.Model):
-    mddr_compound_id = models.ForeignKey(MDDRCompoundImport)  
+    mddr_compound = models.ForeignKey(MDDRCompoundImport)  
     activity_class = models.CharField('Activity Class', max_length=100)  
 
     class Meta:
-        unique_together = (('mddr_compound_id', 'activity_class'),)
+        unique_together = (('mddr_compound', 'activity_class'),)
         verbose_name_plural = "MDDR compound activity classes"
 
 
@@ -261,9 +261,9 @@ class TestActivityDescription(models.Model):
         ('I', 'Inhibition'),
         ('S', 'Stabilization')
     )
-    complex_id = models.ForeignKey(ProteinDomainBoundComplex)
-    biblio_id = models.ForeignKey(Bibliography)
-    ppi_id = models.ForeignKey(Ppi, blank=True, null=True)  
+    complex = models.ForeignKey(ProteinDomainBoundComplex)
+    biblio = models.ForeignKey(Bibliography)
+    ppi = models.ForeignKey(Ppi, blank=True, null=True)  
     test_name = models.CharField('Test name', max_length=100)  
     test_type = models.CharField('Test type', max_length=5, choices=TEST_TYPES)
     test_modulation_type = models.CharField('Test modulation type', max_length=1, choices=TEST_MODULATION_TYPES)
@@ -279,34 +279,34 @@ class CompoundActivityResult(models.Model):
         ('I', 'Inhibition'),
         ('S', 'Stabilization')
     )
-    compound_id = models.ForeignKey(Compound)  
-    test_activity_description_id = models.ForeignKey(TestActivityDescription)  
-    activity_type_id = models.ForeignKey(ActivityType)  
+    compound = models.ForeignKey(Compound)  
+    test_activity_description = models.ForeignKey(TestActivityDescription)  
+    activity_type = models.ForeignKey(ActivityType)  
     activity = models.DecimalField('Activity', max_digits=12, decimal_places=10)  
     modulation_type = models.CharField('Modulation type', max_length=1, choices=MODULATION_TYPES)  
 
     class Meta:
-        unique_together = (('compound_id', 'test_activity_description_id', 'activity_type_id'),)
+        unique_together = (('compound', 'test_activity_description', 'activity_type'),)
 
 class TestCytotoxDescription(models.Model):
-    biblio_id = models.ForeignKey(Bibliography)  
+    biblio = models.ForeignKey(Bibliography)  
     test_name = models.CharField('Cytotoxicity test name', max_length=100)  
     cell_line = models.ForeignKey(CellLine)
     compound_concentration = models.DecimalField('Compound concentration in μM', max_digits=7, decimal_places=3, blank=True, null=True)  
 
 class CompoundCytotoxicityResult(models.Model):
-    compound_id = models.ForeignKey(Compound)  
-    test_cytotoxicity_description_id = models.ForeignKey(TestCytotoxDescription)
+    compound = models.ForeignKey(Compound)  
+    test_cytotoxicity_description = models.ForeignKey(TestCytotoxDescription)
     toxicity = models.BooleanField('Toxicity', default=False)
 
     class Meta:
-        unique_together = (('compound_id', 'test_cytotoxicity_description_id'),)
+        unique_together = (('compound', 'test_cytotoxicity_description'),)
 
 class AdministrationMode(models.Model):
     name = models.CharField('Administration mode', max_length=20, blank=True, null=True)
 
 class TestPKDescription(models.Model):
-    biblio_id = models.ForeignKey(Bibliography)  
+    biblio = models.ForeignKey(Bibliography)  
     test_name = models.CharField('Pharmacokinetic test name', max_length=100)  
     organism = models.ForeignKey(Taxonomy)
     administration_mode = models.ForeignKey(AdministrationMode, blank=True, null=True)  
@@ -314,8 +314,8 @@ class TestPKDescription(models.Model):
     dose_interval = models.IntegerField('Dose interval, in hours', blank=True, null=True)  
 
 class CompoundPKResult(models.Model):
-    compound_id = models.ForeignKey(Compound)  
-    test_pk_description_id = models.ForeignKey(TestPKDescription)
+    compound = models.ForeignKey(Compound)  
+    test_pk_description = models.ForeignKey(TestPKDescription)
     tolerated = models.NullBooleanField('Tolerated', null=True)
     auc = models.IntegerField('Area under curve (ng.mL-1.hr)', blank=True, null=True)  
     clearance = models.DecimalField('Clearance (mL/hr)', max_digits=7, decimal_places=3, blank=True, null=True)  
@@ -326,7 +326,7 @@ class CompoundPKResult(models.Model):
     voldistribution = models.DecimalField('Volume distribution (Vd)', max_digits=5, decimal_places=2, blank=True, null=True)  
 
     class Meta:
-        unique_together = (('compound_id', 'test_pk_description_id'),)
+        unique_together = (('compound', 'test_pk_description'),)
 
 
 class CmpdAction(models.Model):
@@ -334,20 +334,20 @@ class CmpdAction(models.Model):
         ('O', 'Orthosteric'),
         ('A', 'Allosteric')
     )
-    complex_id = models.ForeignKey(ProteinDomainBoundComplex)
-    compound_id = models.ForeignKey(Compound)  
+    complex = models.ForeignKey(ProteinDomainBoundComplex)
+    compound = models.ForeignKey(Compound)  
     activation_mode = models.CharField('Activation mode', max_length=1, choices=ACTIVATION_MODES)  
-    ppi_id = models.ForeignKey(Ppi)
+    ppi = models.ForeignKey(Ppi)
     pdb_id = models.CharField('PDB ID', max_length=4)
     nb_copy_compounds = models.IntegerField('Number of copies for the compound')  
 
     class Meta:
-        unique_together = (('complex_id', 'compound_id', 'pdb_id'),)
+        unique_together = (('complex', 'compound', 'pdb_id'),)
 
 class RefCompoundBiblio(models.Model):
-    compound_id = models.ForeignKey(Compound)  
-    bibliography_id = models.ForeignKey(Bibliography)  
+    compound = models.ForeignKey(Compound)  
+    bibliography = models.ForeignKey(Bibliography)  
     compound_name = models.CharField('Compound name in the publication', max_length=50)  
 
     class Meta:
-        unique_together = (('compound_id', 'bibliography_id'),)
+        unique_together = (('compound', 'bibliography'),)
-- 
GitLab