diff --git a/ippisite/ippidb/migrations/0001_squashed_0035_auto_20180725_1347.py b/ippisite/ippidb/migrations/0001_squashed_0035_auto_20180725_1347.py
new file mode 100644
index 0000000000000000000000000000000000000000..d799bccb01b154d593c512c1b3cb9778a62da045
--- /dev/null
+++ b/ippisite/ippidb/migrations/0001_squashed_0035_auto_20180725_1347.py
@@ -0,0 +1,840 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11 on 2018-07-25 14:00
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    replaces = [('ippidb', '0001_initial'), ('ippidb', '0002_auto_20170221_1606'), ('ippidb', '0003_auto_20170313_1948'), ('ippidb', '0004_auto_20170314_1449'), ('ippidb', '0005_auto_20170327_1301'), ('ippidb', '0006_auto_20170327_1439'), ('ippidb', '0007_auto_20170328_2045'), ('ippidb', '0008_auto_20170329_1441'), ('ippidb', '0009_auto_20170517_2020'), ('ippidb', '0010_auto_20170518_1142'), ('ippidb', '0011_auto_20170518_1404'), ('ippidb', '0012_auto_20170518_1913'), ('ippidb', '0013_auto_20170518_1943'), ('ippidb', '0014_auto_20170519_1243'), ('ippidb', '0015_auto_20170519_1442'), ('ippidb', '0016_auto_20170519_1453'), ('ippidb', '0017_auto_20170519_1500'), ('ippidb', '0018_auto_20170522_1501'), ('ippidb', '0019_auto_20170522_1931'), ('ippidb', '0020_auto_20170522_1945'), ('ippidb', '0021_auto_20170522_1949'), ('ippidb', '0022_auto_20170523_1311'), ('ippidb', '0023_auto_20170523_1858'), ('ippidb', '0024_auto_20170523_2000'), ('ippidb', '0025_auto_20171110_1046'), ('ippidb', '0026_auto_20171110_1426'), ('ippidb', '0027_auto_20180307_1327'), ('ippidb', '0028_auto_20180307_1405'), ('ippidb', '0029_auto_20180308_1935'), ('ippidb', '0030_testpkdescription_concentration'), ('ippidb', '0031_compoundactivityresult_inhibition_percentage'), ('ippidb', '0032_lellebiplotdata'), ('ippidb', '0033_auto_20180502_1500'), ('ippidb', '0034_auto_20180503_2110'), ('ippidb', '0035_auto_20180725_1347')]
+
+    initial = True
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Bibliography',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('source', models.CharField(choices=[('PM', 'PubMed article'), ('PT', 'Patent')], max_length=2, verbose_name='Bibliographic type')),
+                ('id_source', models.CharField(max_length=25, verbose_name='Bibliographic ID')),
+                ('title', models.CharField(max_length=300, verbose_name='Title')),
+                ('journal_name', models.CharField(max_length=50, null=True, verbose_name='Journal name')),
+                ('authors_list', models.CharField(max_length=500, verbose_name='Authors list')),
+                ('biblio_year', models.PositiveSmallIntegerField(verbose_name='Year')),
+                ('cytotox', models.BooleanField(default=False, verbose_name='Cytotoxicity data')),
+                ('in_silico', models.BooleanField(default=False, verbose_name='in silico study performed')),
+                ('in_vitro', models.BooleanField(default=False, verbose_name='in vitro study performed')),
+                ('in_vivo', models.BooleanField(default=False, verbose_name='in vivo study performed')),
+                ('in_cellulo', models.BooleanField(default=False, verbose_name='in cellulo study performed')),
+                ('pharmacokinetic', models.BooleanField(default=False, verbose_name='pharmacokinetic study performed')),
+                ('xray', models.BooleanField(default=False, verbose_name='contains xray data')),
+            ],
+            options={
+                'verbose_name_plural': 'bibliographies',
+            },
+        ),
+        migrations.CreateModel(
+            name='Complex',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('copy_nb', models.IntegerField(verbose_name='Number of copies')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Domain',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('pfam_acc', models.CharField(max_length=10, unique=True, verbose_name='Pfam Accession')),
+                ('pfam_id', models.CharField(max_length=20, verbose_name='Pfam Family Identifier')),
+                ('pfam_description', models.CharField(max_length=100, verbose_name='Pfam Description')),
+                ('domain_family', models.CharField(max_length=25, verbose_name='Domain family')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='MolecularFunction',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('go_id', models.CharField(max_length=10, unique=True, verbose_name='Gene Ontology ID')),
+                ('description', models.CharField(max_length=500, verbose_name='description')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Ppi',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('cc_nb', models.IntegerField(default=1, verbose_name='Number of copies of the complex in the PPI')),
+                ('pdb_id', models.CharField(default=1, max_length=4, verbose_name='PDB ID')),
+                ('ppi_id', models.IntegerField(default=1, verbose_name='PPI identifier')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Protein',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('uniprot_id', models.CharField(max_length=10, unique=True, verbose_name='Uniprot ID')),
+                ('recommended_name_long', models.CharField(max_length=75, verbose_name='Uniprot Recommended Name (long)')),
+                ('short_name', models.CharField(max_length=50, verbose_name='Short name')),
+                ('gene_name', models.CharField(max_length=30, unique=True, verbose_name='Gene name')),
+                ('entry_name', models.CharField(max_length=30, verbose_name='Entry name')),
+                ('molecular_functions', models.ManyToManyField(to='ippidb.MolecularFunction')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Taxonomy',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('taxonomy_id', models.DecimalField(decimal_places=0, max_digits=9, unique=True, verbose_name='NCBI TaxID')),
+                ('name', models.CharField(max_length=200, verbose_name='Organism name')),
+            ],
+            options={
+                'verbose_name_plural': 'taxonomies',
+            },
+        ),
+        migrations.AddField(
+            model_name='protein',
+            name='organism',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Taxonomy'),
+        ),
+        migrations.AddField(
+            model_name='complex',
+            name='protein_id',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Protein'),
+        ),
+        migrations.CreateModel(
+            name='Disease',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(default=None, max_length=30, unique=True, verbose_name='Disease')),
+            ],
+        ),
+        migrations.AlterModelOptions(
+            name='complex',
+            options={'verbose_name_plural': 'complexes'},
+        ),
+        migrations.CreateModel(
+            name='Compound',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('canonical_smile', models.CharField(max_length=250, unique=True, verbose_name='Canonical Smile')),
+                ('is_macrocycle', models.BooleanField(verbose_name='Contains one or more macrocycles')),
+                ('aromatic_ratio', models.DecimalField(decimal_places=2, max_digits=3, verbose_name='Aromatic ratio')),
+                ('balaban_index', models.DecimalField(decimal_places=2, max_digits=3, verbose_name='Balaban index')),
+                ('fsp3', models.DecimalField(decimal_places=2, max_digits=3, verbose_name='Fsp3')),
+                ('dh_Petitjean', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='Dh Petitjean')),
+                ('diam_graph_non_h_petitjean', models.IntegerField(verbose_name='Diameter for the molecular graph for heavy atoms (Petitjean)')),
+                ('gc_molar_refractivity', models.DecimalField(decimal_places=2, max_digits=5, verbose_name='GC Molar Refractivity')),
+                ('g_petitjean', models.DecimalField(decimal_places=2, max_digits=3, verbose_name='G Petitjean')),
+                ('ig_petitjean', models.DecimalField(decimal_places=2, max_digits=3, verbose_name='Ig Petitjean')),
+                ('log_d', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='LogD (Partition coefficient octanol-1/water, with pKa information)')),
+                ('a_log_p', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='ALogP (Partition coefficient octanol-1/water)')),
+                ('mean_atom_vol_vdw', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='Mean atom volume computed with VdW radii')),
+                ('molecular_weight', models.DecimalField(decimal_places=2, max_digits=6, verbose_name='Molecular weight')),
+                ('nb_acceptor_h', models.IntegerField(verbose_name='Number of hydrogen bond acceptors')),
+                ('nb_aliphatic_amines', models.IntegerField(verbose_name='Number of aliphatics amines')),
+                ('nb_aromatic_bonds', models.IntegerField(verbose_name='Number of aromatic bonds')),
+                ('nb_aromatic_ether', models.IntegerField(verbose_name='Number of aromatic ethers')),
+                ('nb_aromatic_sssr', models.IntegerField(verbose_name='Number of aromatic Smallest Set of System Rings (SSSR)')),
+                ('nb_atom', models.IntegerField(verbose_name='Number of atoms')),
+                ('nb_atom_non_h', models.IntegerField(verbose_name='Number of non hydrogen atoms')),
+                ('nb_benzene_like_rings', models.IntegerField(verbose_name='Number of benzene-like rings')),
+                ('nb_bonds', models.IntegerField(verbose_name='Number of bonds')),
+                ('nb_bonds_non_h', models.IntegerField(verbose_name='Number of bonds not involving a hydrogen')),
+                ('nb_br', models.IntegerField(verbose_name='Number of Bromine atoms')),
+                ('nb_c', models.IntegerField(verbose_name='Number of Carbon atoms')),
+                ('nb_chiral_centers', models.IntegerField(verbose_name='Number of chiral centers')),
+                ('nb_circuits', models.IntegerField(verbose_name='Number of circuits')),
+                ('nb_cl', models.IntegerField(verbose_name='Number of Chlorine atoms')),
+                ('nb_csp2', models.IntegerField(verbose_name='Number of sp2-hybridized carbon atoms')),
+                ('nb_csp3', models.IntegerField(verbose_name='Number of sp3-hybridized carbon atoms')),
+                ('nb_donor_h', models.IntegerField(verbose_name='Number of hydrogen bond donors')),
+                ('nb_double_bonds', models.IntegerField(verbose_name='Number of double bonds')),
+                ('nb_f', models.IntegerField(verbose_name='Number of fluorine atoms')),
+                ('nb_i', models.IntegerField(verbose_name='Number of iodine atoms')),
+                ('nb_multiple_bonds', models.IntegerField(verbose_name='Number of multiple bonds')),
+                ('nb_n', models.IntegerField(verbose_name='Number of nitrogen atoms')),
+                ('nb_o', models.IntegerField(verbose_name='Number of oxygen atoms')),
+                ('nb_rings', models.IntegerField(verbose_name='Number of rings')),
+                ('nb_rotatable_bonds', models.IntegerField(verbose_name='Number of rotatable bonds')),
+                ('radius_graph_non_h_petitjean', models.IntegerField(verbose_name='Radius for the molecular graph for heavy atoms (Petitjean)')),
+                ('randic_index', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='Randic index')),
+                ('rdf070m', models.DecimalField(decimal_places=2, max_digits=5, verbose_name='RDF070m, radial distribution function weighted by the atomic masses at 7Ã…')),
+                ('rotatable_bond_fraction', models.DecimalField(decimal_places=2, max_digits=3, verbose_name='Fraction of rotatable bonds')),
+                ('sum_atom_polar', models.DecimalField(decimal_places=2, max_digits=5, verbose_name='Sum of atomic polarizabilities')),
+                ('sum_atom_vol_vdw', models.DecimalField(decimal_places=2, max_digits=6, verbose_name='Sum of atom volumes computed with VdW radii')),
+                ('surface_vdw_petitjean', models.DecimalField(decimal_places=2, max_digits=6, verbose_name='Van der Waals surface area (Petitjean)')),
+                ('thickness_petitjean', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='Thickness (Petitjean)')),
+                ('tpsa', models.DecimalField(decimal_places=2, max_digits=5, verbose_name='Topological Polar Surface Area (TPSA)')),
+                ('ui', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='Unsaturation index')),
+                ('vol_vdw_petitjean', models.DecimalField(decimal_places=2, max_digits=7, verbose_name='Van der Waals volume (Petitjean)')),
+                ('wiener_index', models.IntegerField(verbose_name='Wiener index')),
+                ('common_name', models.CharField(blank=True, max_length=20, null=True, unique=True, verbose_name='Common name')),
+                ('pubchem_id', models.CharField(blank=True, max_length=10, null=True, unique=True, verbose_name='Pubchem ID')),
+                ('chemspider_id', models.CharField(blank=True, max_length=10, null=True, unique=True, verbose_name='Chemspider ID')),
+                ('chembl_id', models.CharField(blank=True, max_length=30, null=True, unique=True, verbose_name='Chembl ID')),
+                ('iupac_name', models.CharField(blank=True, max_length=255, null=True, unique=True, verbose_name='IUPAC name')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='MDDRCompoundActivityClass',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('activity_class', models.CharField(max_length=100, verbose_name='Activity Class')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='MDDRCompoundImport',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('mddr_compound_id', models.IntegerField(verbose_name='MDDR compound ID')),
+                ('mddr_name', models.CharField(max_length=40, verbose_name='MDDR name')),
+                ('dvpmt_phase', models.CharField(max_length=20, verbose_name='Development phase')),
+                ('canonical_smile', models.CharField(blank=True, max_length=500, null=True, unique=True, verbose_name='Canonical Smile')),
+                ('db_import_date', models.DecimalField(decimal_places=0, max_digits=6, verbose_name='MDDR release year/month')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='MDDRSimilarity',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('canonical_smile_ippidb', models.CharField(blank=True, max_length=500, null=True, unique=True, verbose_name='Canonical Smile for IPPIDB compound')),
+                ('canonical_smile_mddr', models.CharField(blank=True, max_length=500, null=True, unique=True, verbose_name='Canonical Smile for MDDR Compound')),
+                ('tanimoto', models.DecimalField(decimal_places=5, max_digits=6, verbose_name='Tanimoto')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='ProteinDomainComplex',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('ppc_copy_nb', models.IntegerField(verbose_name='Number of copies of the protein in the complex')),
+            ],
+            options={
+                'verbose_name_plural': 'complexes',
+            },
+        ),
+        migrations.CreateModel(
+            name='Symmetry',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('code', models.CharField(max_length=2, verbose_name='Symmetry code')),
+                ('description', models.CharField(max_length=300, verbose_name='Description')),
+            ],
+            options={
+                'verbose_name_plural': 'symmetries',
+            },
+        ),
+        migrations.RemoveField(
+            model_name='complex',
+            name='protein_id',
+        ),
+        migrations.CreateModel(
+            name='ProteinDomainBoundComplex',
+            fields=[
+                ('proteindomaincomplex_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ippidb.ProteinDomainComplex')),
+                ('ppp_copy_nb_per_p', models.IntegerField(verbose_name='Number of copies of the protein in the pocket')),
+                ('pockets_nb', models.IntegerField(verbose_name='Total number of pockets in the complex')),
+            ],
+            options={
+                'verbose_name_plural': 'bound complexes',
+            },
+            bases=('ippidb.proteindomaincomplex',),
+        ),
+        migrations.CreateModel(
+            name='ProteinDomainPartnerComplex',
+            fields=[
+                ('proteindomaincomplex_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ippidb.ProteinDomainComplex')),
+            ],
+            options={
+                'verbose_name_plural': 'partner complexes',
+            },
+            bases=('ippidb.proteindomaincomplex',),
+        ),
+        migrations.DeleteModel(
+            name='Complex',
+        ),
+        migrations.AddField(
+            model_name='proteindomaincomplex',
+            name='domain',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Domain'),
+        ),
+        migrations.AddField(
+            model_name='proteindomaincomplex',
+            name='protein',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Protein'),
+        ),
+        migrations.AlterUniqueTogether(
+            name='mddrsimilarity',
+            unique_together=set([('canonical_smile_ippidb', 'canonical_smile_mddr')]),
+        ),
+        migrations.AlterUniqueTogether(
+            name='mddrcompoundimport',
+            unique_together=set([('mddr_compound_id', 'mddr_name', 'dvpmt_phase')]),
+        ),
+        migrations.AddField(
+            model_name='mddrcompoundactivityclass',
+            name='mddr_compound_id',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.MDDRCompoundImport'),
+        ),
+        migrations.AddField(
+            model_name='compound',
+            name='mddr_compound_id',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ippidb.MDDRCompoundImport'),
+        ),
+        migrations.AddField(
+            model_name='ppi',
+            name='complex_id',
+            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='ippidb.ProteinDomainComplex'),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='ppi',
+            name='symmetry_id',
+            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='ippidb.Symmetry'),
+            preserve_default=False,
+        ),
+        migrations.AlterUniqueTogether(
+            name='mddrcompoundactivityclass',
+            unique_together=set([('mddr_compound_id', 'activity_class')]),
+        ),
+        migrations.CreateModel(
+            name='CellLine',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=50, unique=True, verbose_name='Name')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='TestActivityDescription',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('test_name', models.CharField(max_length=100, verbose_name='Test name')),
+                ('test_type', models.CharField(choices=[('BIOCH', 'Biochemical assay'), ('CELL', 'Cellular assay')], max_length=5, verbose_name='Test type')),
+                ('test_modulation_type', models.CharField(choices=[('B', 'Binding'), ('I', 'Inhibition'), ('S', 'Stabilization')], max_length=1, verbose_name='Test modulation type')),
+                ('nb_active_compounds', models.IntegerField(verbose_name='Total number of active compounds')),
+                ('biblio_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Bibliography')),
+                ('cell_line', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.CellLine')),
+                ('complex_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.ProteinDomainBoundComplex')),
+                ('ppi_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ippidb.Ppi')),
+            ],
+        ),
+        migrations.AlterModelOptions(
+            name='mddrcompoundactivityclass',
+            options={'verbose_name_plural': 'MDDR compound activity classes'},
+        ),
+        migrations.AlterModelOptions(
+            name='mddrcompoundimport',
+            options={'verbose_name_plural': 'MDDR compound imports'},
+        ),
+        migrations.AlterModelOptions(
+            name='mddrsimilarity',
+            options={'verbose_name_plural': 'MDDR similarities'},
+        ),
+        migrations.CreateModel(
+            name='ActivityType',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=50, unique=True, verbose_name='Name')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='CmpdAction',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('activation_mode', models.CharField(choices=[('O', 'Orthosteric'), ('A', 'Allosteric')], max_length=1, verbose_name='Activation mode')),
+                ('complex_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.ProteinDomainBoundComplex')),
+                ('compound_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Compound')),
+                ('nb_copy_compounds', models.IntegerField(default=1, verbose_name='Number of copies for the compound')),
+                ('pdb_id', models.CharField(default='NA', max_length=4, verbose_name='PDB ID')),
+                ('ppi_id', models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='ippidb.Ppi')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='CompoundActivityResult',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('activity', models.DecimalField(decimal_places=10, max_digits=12, verbose_name='Activity')),
+                ('activity_type_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.ActivityType')),
+                ('compound_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Compound')),
+                ('test_activity_description_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.TestActivityDescription')),
+                ('modulation_type', models.CharField(choices=[('B', 'Binding'), ('I', 'Inhibition'), ('S', 'Stabilization')], default='B', max_length=1, verbose_name='Modulation type')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='CompoundCytotoxicityResult',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('toxicity', models.BooleanField(default=False, verbose_name='Toxicity')),
+                ('compound_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Compound')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='CompoundPKResult',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('tolerated', models.NullBooleanField(verbose_name='Tolerated')),
+                ('auc', models.IntegerField(blank=True, null=True, verbose_name='Area under curve (ng.mL-1.hr)')),
+                ('clearance', models.DecimalField(blank=True, decimal_places=3, max_digits=7, null=True, verbose_name='Clearance (mL/hr)')),
+                ('cmax', models.DecimalField(blank=True, decimal_places=3, max_digits=7, null=True, verbose_name='Maximal concentration (ng/mL)')),
+                ('oral_bioavailability', models.IntegerField(blank=True, null=True, verbose_name='Oral Bioavailability (%F)')),
+                ('t_demi', models.IntegerField(blank=True, null=True, verbose_name='t½')),
+                ('t_max', models.IntegerField(blank=True, null=True, verbose_name='tmax')),
+                ('voldistribution', models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='Volume distribution (Vd)')),
+                ('compound_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Compound')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='TestCytotoxDescription',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('test_name', models.CharField(max_length=100, verbose_name='Cytotoxicity test name')),
+                ('compound_concentration', models.DecimalField(blank=True, decimal_places=3, max_digits=7, null=True, verbose_name='Compound concentration in μM')),
+                ('biblio', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Bibliography')),
+                ('cell_line', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.CellLine')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='TestPKDescription',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('test_name', models.CharField(max_length=100, verbose_name='Pharmacokinetic test name')),
+                ('dose', models.DecimalField(blank=True, decimal_places=4, max_digits=9, null=True, verbose_name='Dose in mg/kg')),
+                ('dose_interval', models.IntegerField(blank=True, null=True, verbose_name='Dose interval, in hours')),
+                ('administration_mode', models.CharField(blank=True, choices=[('IV', ''), ('PO', ''), ('IP', ''), ('SL', 'SL')], max_length=2, null=True, verbose_name='Administration mode')),
+                ('biblio', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Bibliography')),
+                ('organism', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Taxonomy')),
+                ('concentration', models.DecimalField(blank=True, decimal_places=3, max_digits=7, null=True, verbose_name='Concentration in mg/l')),
+            ],
+        ),
+        migrations.AddField(
+            model_name='compoundpkresult',
+            name='test_pk_description_id',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.TestPKDescription'),
+        ),
+        migrations.AddField(
+            model_name='compoundcytotoxicityresult',
+            name='test_cytotoxicity_description_id',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.TestCytotoxDescription'),
+        ),
+        migrations.AlterUniqueTogether(
+            name='compoundpkresult',
+            unique_together=set([('compound_id', 'test_pk_description_id')]),
+        ),
+        migrations.AlterUniqueTogether(
+            name='compoundcytotoxicityresult',
+            unique_together=set([('compound_id', 'test_cytotoxicity_description_id')]),
+        ),
+        migrations.AlterUniqueTogether(
+            name='compoundactivityresult',
+            unique_together=set([('compound_id', 'test_activity_description_id', 'activity_type_id')]),
+        ),
+        migrations.CreateModel(
+            name='RefCompoundBiblio',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('compound_name', models.CharField(max_length=50, verbose_name='Compound name in the publication')),
+                ('bibliography_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Bibliography')),
+                ('compound_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Compound')),
+            ],
+        ),
+        migrations.AlterUniqueTogether(
+            name='cmpdaction',
+            unique_together=set([('complex_id', 'compound_id', 'pdb_id')]),
+        ),
+        migrations.AlterUniqueTogether(
+            name='refcompoundbiblio',
+            unique_together=set([('compound_id', 'bibliography_id')]),
+        ),
+        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='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='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.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.RemoveField(
+            model_name='cmpdaction',
+            name='complex',
+        ),
+        migrations.AlterUniqueTogether(
+            name='cmpdaction',
+            unique_together=set([('ppi', 'compound', 'activation_mode', '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.RenameField(
+            model_name='compoundpkresult',
+            old_name='cmax',
+            new_name='c_max',
+        ),
+        migrations.AlterUniqueTogether(
+            name='compoundpkresult',
+            unique_together=set([('compound', 'test_pk_description')]),
+        ),
+        migrations.AlterUniqueTogether(
+            name='mddrcompoundactivityclass',
+            unique_together=set([]),
+        ),
+        migrations.AlterUniqueTogether(
+            name='refcompoundbiblio',
+            unique_together=set([('compound', 'bibliography')]),
+        ),
+        migrations.CreateModel(
+            name='PpiComplex',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('cc_nb', models.IntegerField(default=1, verbose_name='Number of copies of the complex in the PPI')),
+                ('complex', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.ProteinDomainComplex')),
+            ],
+            options={
+                'verbose_name_plural': 'Ppi complexes',
+            },
+        ),
+        migrations.RemoveField(
+            model_name='ppi',
+            name='cc_nb',
+        ),
+        migrations.RemoveField(
+            model_name='ppi',
+            name='complex',
+        ),
+        migrations.RemoveField(
+            model_name='ppi',
+            name='ppi_id',
+        ),
+        migrations.RemoveField(
+            model_name='testactivitydescription',
+            name='complex',
+        ),
+        migrations.AlterField(
+            model_name='compoundactivityresult',
+            name='activity_type',
+            field=models.CharField(choices=[('pIC50', 'pIC50 (half maximal inhibitory concentration, -log10)'), ('pEC50', 'pEC50 (half maximal effective concentration, -log10)'), ('pKd', 'pKd (dissociation constant, -log10)'), ('pKi', 'pKi (inhibition constant, -log10)')], max_length=5, verbose_name='Activity type'),
+        ),
+        migrations.DeleteModel(
+            name='ActivityType',
+        ),
+        migrations.AddField(
+            model_name='ppicomplex',
+            name='ppi',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Ppi'),
+        ),
+        migrations.AlterField(
+            model_name='ppi',
+            name='pdb_id',
+            field=models.CharField(max_length=4, null=True, verbose_name='PDB ID'),
+        ),
+        migrations.RenameModel(
+            old_name='CmpdAction',
+            new_name='CompoundAction',
+        ),
+        migrations.AddField(
+            model_name='ppi',
+            name='diseases',
+            field=models.ManyToManyField(to='ippidb.Disease'),
+        ),
+        migrations.RemoveField(
+            model_name='proteindomainboundcomplex',
+            name='pockets_nb',
+        ),
+        migrations.AddField(
+            model_name='ppi',
+            name='pockets_nb',
+            field=models.IntegerField(default=1, verbose_name='Total number of pockets in the complex'),
+        ),
+        migrations.AlterField(
+            model_name='compound',
+            name='pubchem_id',
+            field=models.CharField(blank=True, max_length=10, null=True, verbose_name='Pubchem ID'),
+        ),
+        migrations.AlterField(
+            model_name='compound',
+            name='iupac_name',
+            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='IUPAC name'),
+        ),
+        migrations.AlterField(
+            model_name='compound',
+            name='chembl_id',
+            field=models.CharField(blank=True, max_length=30, null=True, verbose_name='Chembl ID'),
+        ),
+        migrations.CreateModel(
+            name='MDDRActivityClass',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=100, unique=True, verbose_name='Activity Class')),
+            ],
+            options={
+                'verbose_name_plural': 'MDDR activity classes',
+            },
+        ),
+        migrations.RemoveField(
+            model_name='mddrcompoundactivityclass',
+            name='mddr_compound',
+        ),
+        migrations.DeleteModel(
+            name='MDDRCompoundActivityClass',
+        ),
+        migrations.AddField(
+            model_name='mddrcompoundimport',
+            name='activity_classes',
+            field=models.ManyToManyField(to='ippidb.MDDRActivityClass'),
+        ),
+        migrations.AlterField(
+            model_name='mddrcompoundimport',
+            name='db_import_date',
+            field=models.DateTimeField(verbose_name='MDDR release year/month'),
+        ),
+        migrations.RemoveField(
+            model_name='mddrcompoundimport',
+            name='mddr_compound_id',
+        ),
+        migrations.AlterUniqueTogether(
+            name='mddrcompoundimport',
+            unique_together=set([('mddr_name', 'dvpmt_phase', 'canonical_smile')]),
+        ),
+        migrations.AlterField(
+            model_name='mddrcompoundimport',
+            name='canonical_smile',
+            field=models.CharField(blank=True, max_length=500, null=True, verbose_name='Canonical Smile'),
+        ),
+        migrations.AlterField(
+            model_name='mddrcompoundimport',
+            name='dvpmt_phase',
+            field=models.CharField(choices=[('Biological Testing', ''), ('Preclinical', ''), ('Phase III', ''), ('Phase II', ''), ('Phase I/II', ''), ('Phase I', ''), ('Launched', ''), ('Pre-Registered', ''), ('Not Applicable', ''), ('Discontinued', ''), ('Clinical', ''), ('Withdrawn', ''), ('Registered', ''), ('Not Determined', ''), ('Phase II/III', ''), ('IND Filed', '')], max_length=20, verbose_name='Development phase'),
+        ),
+        migrations.AlterField(
+            model_name='testactivitydescription',
+            name='cell_line',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ippidb.CellLine'),
+        ),
+        migrations.AlterField(
+            model_name='bibliography',
+            name='in_cellulo',
+            field=models.BooleanField(default=False, verbose_name='in cellulo study'),
+        ),
+        migrations.AlterField(
+            model_name='bibliography',
+            name='in_silico',
+            field=models.BooleanField(default=False, verbose_name='in silico study'),
+        ),
+        migrations.AlterField(
+            model_name='bibliography',
+            name='in_vitro',
+            field=models.BooleanField(default=False, verbose_name='in vitro study'),
+        ),
+        migrations.AlterField(
+            model_name='bibliography',
+            name='in_vivo',
+            field=models.BooleanField(default=False, verbose_name='in vivo study'),
+        ),
+        migrations.AlterField(
+            model_name='bibliography',
+            name='pharmacokinetic',
+            field=models.BooleanField(default=False, verbose_name='pharmacokinetic study'),
+        ),
+        migrations.AlterField(
+            model_name='bibliography',
+            name='source',
+            field=models.CharField(choices=[('PM', 'PubMed ID'), ('PT', 'Patent'), ('DO', 'DOI ID')], default='PM', max_length=2, verbose_name='Bibliographic type'),
+        ),
+        migrations.AlterField(
+            model_name='bibliography',
+            name='xray',
+            field=models.BooleanField(default=False, verbose_name='X-Ray data'),
+        ),
+        migrations.AlterField(
+            model_name='compoundaction',
+            name='activation_mode',
+            field=models.CharField(choices=[('O', 'Orthosteric'), ('A', 'Allosteric'), ('U', 'Unspecified')], max_length=1, verbose_name='Activation mode'),
+        ),
+        migrations.AlterField(
+            model_name='compoundaction',
+            name='pdb_id',
+            field=models.CharField(blank=True, max_length=4, null=True, verbose_name='PDB ID'),
+        ),
+        migrations.AddField(
+            model_name='testactivitydescription',
+            name='is_primary',
+            field=models.BooleanField(default=False, verbose_name='Is primary'),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='testactivitydescription',
+            name='protein_bound_construct',
+            field=models.CharField(blank=True, choices=[('F', 'Full length'), ('U', 'Unspecified')], max_length=5, null=True, verbose_name='Protein bound construct'),
+        ),
+        migrations.AddField(
+            model_name='testactivitydescription',
+            name='protein_domain_bound_complex',
+            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='ippidb.ProteinDomainBoundComplex'),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='compoundactivityresult',
+            name='inhibition_percentage',
+            field=models.DecimalField(decimal_places=0, max_digits=3, null=True, verbose_name='Inhibition percentage'),
+        ),
+        migrations.CreateModel(
+            name='LeLleBiplotData',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('le_lle_biplot_data', models.CharField(blank=True, max_length=150000, null=True, verbose_name='LE-LLE biplot JSON data')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='PpiFamily',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=30, unique=True, verbose_name='Name')),
+            ],
+            options={
+                'verbose_name_plural': 'PPI Families',
+            },
+        ),
+        migrations.AddField(
+            model_name='ppi',
+            name='family',
+            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='ippidb.PpiFamily'),
+        ),
+        migrations.CreateModel(
+            name='PcaBiplotData',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('pca_biplot_data', models.CharField(blank=True, max_length=150000, null=True, verbose_name='PCA biplot JSON data')),
+            ],
+        ),
+    ]