diff --git a/backend/metagenedb/apps/catalog/migrations/0029_annotation_geneannotation.py b/backend/metagenedb/apps/catalog/migrations/0029_annotation_geneannotation.py new file mode 100644 index 0000000000000000000000000000000000000000..d3749b2fcb8011cb9d6122333e78b3ee5dac13d9 --- /dev/null +++ b/backend/metagenedb/apps/catalog/migrations/0029_annotation_geneannotation.py @@ -0,0 +1,33 @@ +# Generated by Django 3.1.7 on 2021-04-08 15:05 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('catalog', '0028_index_source_and_functions'), + ] + + operations = [ + migrations.CreateModel( + name='Annotation', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(blank=True, max_length=500)), + ], + ), + migrations.CreateModel( + name='GeneAnnotation', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('annotation_category', models.CharField(choices=[('no-cat', 'No Category'), ('body-site', 'Body site')], default='no-cat', max_length=10)), + ('annotation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='catalog.annotation')), + ('gene', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='catalog.gene')), + ], + options={ + 'unique_together': {('gene', 'annotation')}, + }, + ), + ] diff --git a/backend/metagenedb/apps/catalog/models/annotation.py b/backend/metagenedb/apps/catalog/models/annotation.py new file mode 100644 index 0000000000000000000000000000000000000000..7f1ecd78fb6a1faf9bdf9b5aaa40ebb97d50a1ef --- /dev/null +++ b/backend/metagenedb/apps/catalog/models/annotation.py @@ -0,0 +1,8 @@ +from django.db import models + + +class Annotation(models.Model): + name = models.CharField(max_length=500, blank=True) + + def __str__(self): + return self.name diff --git a/backend/metagenedb/apps/catalog/models/gene.py b/backend/metagenedb/apps/catalog/models/gene.py index 08e8449d52bf33499fb5b9536aeb899dd7cceca3..2e5240bdc933f2b42c3c0591ff7bfb61c251dd11 100644 --- a/backend/metagenedb/apps/catalog/models/gene.py +++ b/backend/metagenedb/apps/catalog/models/gene.py @@ -2,6 +2,7 @@ from itertools import repeat from django.db import models +from .annotation import Annotation from .function import Function @@ -95,3 +96,24 @@ class GeneFunction(models.Model): unique_together = [ 'gene', 'function' ] + + +class GeneAnnotation(models.Model): + NO_CAT = 'no-cat' + BODY_SITE = 'body-site' + ANNOTATION_CHOICES = [ + (NO_CAT, 'No Category'), + (BODY_SITE, 'Body site'), + ] + + gene = models.ForeignKey(Gene, on_delete=models.CASCADE) + annotation = models.ForeignKey(Annotation, on_delete=models.CASCADE) + annotation_category = models.CharField(max_length=10, choices=ANNOTATION_CHOICES, default=NO_CAT) + + def __str__(self): + return f"{self.gene.gene_id} <-> [{self.annotation_category}] {self.annotation.name}" + + class Meta: + unique_together = [ + 'gene', 'annotation' + ]