diff --git a/ippisite/ippidb/migrations/0064_proteindomaincomplex_polymorphic_ctype.py b/ippisite/ippidb/migrations/0064_proteindomaincomplex_polymorphic_ctype.py new file mode 100644 index 0000000000000000000000000000000000000000..aa4370a431bc0d4053425affe737d8e7846bbc2f --- /dev/null +++ b/ippisite/ippidb/migrations/0064_proteindomaincomplex_polymorphic_ctype.py @@ -0,0 +1,34 @@ +# Generated by Django 2.2.1 on 2020-06-29 06:51 + +from django.db import migrations, models +import django.db.models.deletion + + + +def forwards_func(apps, schema_editor): + # add the content type to the classes using django-polymorphic + # i.e. ProteinDomainBoundComplex and ProteinDomainPartnerComplex + # code is adapted from https://django-polymorphic.readthedocs.io/en/stable/migrating.html + ProteinDomainBoundComplex = apps.get_model('ippidb', 'ProteinDomainBoundComplex') + ProteinDomainPartnerComplex = apps.get_model('ippidb', 'ProteinDomainPartnerComplex') + ContentType = apps.get_model('contenttypes', 'ContentType') + pdbc_ct = ContentType.objects.get_for_model(ProteinDomainBoundComplex) + ProteinDomainBoundComplex.objects.filter(polymorphic_ctype__isnull=True).update(polymorphic_ctype=pdbc_ct) + pdpc_ct = ContentType.objects.get_for_model(ProteinDomainPartnerComplex) + ProteinDomainPartnerComplex.objects.filter(polymorphic_ctype__isnull=True).update(polymorphic_ctype=pdpc_ct) + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('ippidb', '0063_fill_drugbank_links'), + ] + + operations = [ + migrations.AddField( + model_name='proteindomaincomplex', + name='polymorphic_ctype', + field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_ippidb.proteindomaincomplex_set+', to='contenttypes.ContentType'), + ), + migrations.RunPython(forwards_func, migrations.RunPython.noop), + ] diff --git a/ippisite/ippidb/models.py b/ippisite/ippidb/models.py index fd6d9bde378e61d93b5d2a5d3c6f360e381fc10b..aa3ce3dea6359bf580cc518791bbeb3ca32104ea 100644 --- a/ippisite/ippidb/models.py +++ b/ippisite/ippidb/models.py @@ -20,6 +20,7 @@ from django.utils.translation import ugettext_lazy as _ from django_celery_results.models import TaskResult from django.dispatch import receiver from django.db.models.signals import post_save +from polymorphic.models import PolymorphicModel from .utils import FingerPrinter, smi2inchi, smi2inchikey from .ws import ( @@ -363,7 +364,7 @@ class ProteinDomainComplexGroup(models.Model): return str(self) -class ProteinDomainComplex(models.Model): +class ProteinDomainComplex(PolymorphicModel): """ Protein-Domain association """ @@ -405,6 +406,10 @@ class ProteinDomainBoundComplex(ProteinDomainComplex): ppp_copy_nb_per_p = models.IntegerField(_("ppp_copy_nb_per_p")) + @property + def complex_type(self): + return "Bound" + class Meta: verbose_name_plural = "bound complexes" @@ -427,6 +432,10 @@ class ProteinDomainPartnerComplex(ProteinDomainComplex): Protein-Domain association with a "partner complex" role """ + @property + def complex_type(self): + return "Partner" + class Meta: verbose_name_plural = "partner complexes" diff --git a/ippisite/ippisite/settings.py b/ippisite/ippisite/settings.py index eae1293bfce34d82ee2c68e3b16c8720beba11dd..1cd64c663e6e2441525917a81d6e385d2f1fdb2b 100644 --- a/ippisite/ippisite/settings.py +++ b/ippisite/ippisite/settings.py @@ -57,6 +57,7 @@ INSTALLED_APPS = [ "allauth.socialaccount", # "allauth.socialaccount.providers.github", "allauth.socialaccount.providers.orcid", + "polymorphic", ] MIDDLEWARE = [ diff --git a/ippisite/ippisite/settings.template.py b/ippisite/ippisite/settings.template.py index cc7380331ae0fc0da893646062c37230ac094f0f..8991371af37b5479e2b38edd19edb196b7d2e0b3 100644 --- a/ippisite/ippisite/settings.template.py +++ b/ippisite/ippisite/settings.template.py @@ -60,6 +60,7 @@ INSTALLED_APPS = [ "allauth.socialaccount", # "allauth.socialaccount.providers.github", "allauth.socialaccount.providers.orcid", + "polymorphic", ] MIDDLEWARE = [ diff --git a/ippisite/requirements-core.txt b/ippisite/requirements-core.txt index f1744c72dccb44a88baa3b6501c13efb20f4476b..3cde9a193238df1e27034259bba4bc5b9aed0e72 100644 --- a/ippisite/requirements-core.txt +++ b/ippisite/requirements-core.txt @@ -28,3 +28,4 @@ git+https://gitlab.pasteur.fr/hmenager/django-diu.git#egg=django_diu #openbabel django-crispy-forms celery +django-polymorphic \ No newline at end of file