diff --git a/atlas/admin.py b/atlas/admin.py index 7aa8871c..c5f644dd 100755 --- a/atlas/admin.py +++ b/atlas/admin.py @@ -1,6 +1,8 @@ from django.contrib import admin from .models import ( Case, + CaseDetail, + CaseCollection, Differential, Series, SeriesImage, @@ -37,6 +39,8 @@ admin.site.register(SeriesFinding) admin.site.register(Differential) admin.site.register(PathologicalProcess) admin.site.register(Presentation) +admin.site.register(CaseCollection) +admin.site.register(CaseDetail) class DifferentialInline(admin.TabularInline): diff --git a/atlas/migrations/0025_auto_20220321_1602.py b/atlas/migrations/0025_auto_20220321_1602.py new file mode 100644 index 00000000..d7c0ef6a --- /dev/null +++ b/atlas/migrations/0025_auto_20220321_1602.py @@ -0,0 +1,36 @@ +# Generated by Django 3.2.10 on 2022-03-21 16:02 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('atlas', '0024_alter_case_previous_case'), + ] + + operations = [ + migrations.CreateModel( + name='CaseCollection', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255, unique=True)), + ('open_access', models.BooleanField(default=True, help_text='If a collection should be freely available to browse')), + ], + ), + migrations.CreateModel( + name='CaseDetail', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('sort_order', models.IntegerField()), + ('case', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='atlas.case')), + ('collection', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='atlas.casecollection')), + ], + ), + migrations.AddField( + model_name='casecollection', + name='cases', + field=models.ManyToManyField(through='atlas.CaseDetail', to='atlas.Case'), + ), + ] diff --git a/atlas/models.py b/atlas/models.py index efc3e2ac..7e04ea14 100644 --- a/atlas/models.py +++ b/atlas/models.py @@ -530,3 +530,19 @@ class Series(models.Model): size += i.image.size return size + + +class CaseCollection(models.Model): + name = models.CharField(max_length=255, unique=True) + + cases = models.ManyToManyField(Case, through="CaseDetail") + + open_access = models.BooleanField( + help_text="If a collection should be freely available to browse", default=True + ) + +class CaseDetail(models.Model): + case = models.ForeignKey(Case, on_delete=models.CASCADE) + collection = models.ForeignKey(CaseCollection, on_delete=models.CASCADE) + + sort_order = models.IntegerField() \ No newline at end of file