diff --git a/isic/core/migrations/0001_default_site.py b/isic/core/migrations/0001_default_site.py new file mode 100644 index 00000000..c923845f --- /dev/null +++ b/isic/core/migrations/0001_default_site.py @@ -0,0 +1,40 @@ +from django.conf import settings +from django.db import migrations +from django.db.backends.base.schema import BaseDatabaseSchemaEditor +from django.db.migrations.state import StateApps + + +def update_default_site(apps: StateApps, schema_editor: BaseDatabaseSchemaEditor): + Site = apps.get_model('sites', 'Site') # noqa: N806 + + # A default site object may or may not exist. + # If this is a brand-new database, the post_migrate will not fire until the very end of the + # "migrate" command, so the sites app will not have created a default site object yet. + # If this is an existing database, the sites app will likely have created an default site + # object already. + Site.objects.update_or_create( + pk=settings.SITE_ID, defaults={'domain': 'api.isic-archive.com', 'name': 'ISIC Archive'} + ) + + +def rollback_default_site(apps: StateApps, schema_editor: BaseDatabaseSchemaEditor): + Site = apps.get_model('sites', 'Site') # noqa: N806 + + # This is the initial value of the default site object, as populated by the sites app. + # If it doesn't exist for some reason, there is nothing to roll back. + Site.objects.filter(pk=settings.SITE_ID).update(domain='example.com', name='example.com') + + +class Migration(migrations.Migration): + replaces = [ + ('login', '0001_default_site'), + ] + + dependencies = [ + # This is the final sites app migration + ('sites', '0002_alter_domain_unique'), + ] + + operations = [ + migrations.RunPython(update_default_site, rollback_default_site), + ] diff --git a/isic/core/migrations/0001_initial_squashed.py b/isic/core/migrations/0001_initial_squashed.py new file mode 100644 index 00000000..8ca3f39f --- /dev/null +++ b/isic/core/migrations/0001_initial_squashed.py @@ -0,0 +1,632 @@ +from django.conf import settings +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import django.db.models.expressions +import django_extensions.db.fields +import s3_file_field.fields + +import isic.core.models.isic_id +from isic.core.search import maybe_create_index + + +def create_elasticsearch_index(apps, schema_editor): + maybe_create_index() + + +class Migration(migrations.Migration): + replaces = [ + ('core', '0001_initial'), + ('core', '0002_alter_duplicateimage_accession'), + ('core', '0003_alter_duplicateimage_accession'), + ('core', '0004_auto_20210519_2247'), + ('core', '0005_collection'), + ('core', '0006_alter_collection_images'), + ('core', '0007_isic_id'), + ('core', '0008_auto_20210526_0232'), + ('core', '0009_auto_20210602_1658'), + ('core', '0010_auto_20210602_1835'), + ('core', '0011_alter_girderimage_accession_id'), + ('core', '0012_auto_20210603_2108'), + ('core', '0013_auto_20210603_2311'), + ('core', '0014_auto_20210604_0410'), + ('core', '0015_auto_20210604_1420'), + ('core', '0016_alter_girderimage_status'), + ('core', '0017_auto_20210604_2116'), + ('core', '0018_auto_20210607_1305'), + ('core', '0019_girderimage_pre_review'), + ('core', '0020_auto_20210809_2143'), + ('core', '0020_auto_20210807_0228'), + ('core', '0021_auto_20210814_0025'), + ('core', '0022_alter_image_isic'), + ('core', '0023_collection_public'), + ('core', '0024_alter_imageredirect_image'), + ('core', '0025_alter_imagealias_options'), + ('core', '0026_auto_20211007_1737'), + ('core', '0027_girderimage_raw'), + ('core', '0028_delete_duplicateimage'), + ('core', '0029_auto_20211110_0008'), + ('core', '0030_alter_girderimage_accession'), + ('core', '0031_segmentation_segmentationreview'), + ('core', '0032_alter_image_public'), + ('core', '0033_collection_locked'), + ('core', '0034_auto_20220217_1853'), + ('core', '0035_auto_20220305_0844'), + ('core', '0036_id_big_auto_field'), + ] + + initial = True + + dependencies = [ + ('auth', '0012_alter_user_first_name_max_length'), + ('ingest', '0001_initial_squashed'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Collection', + fields=[ + ( + 'id', + models.BigAutoField( + auto_created=True, primary_key=True, serialize=False, verbose_name='ID' + ), + ), + ( + 'created', + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, verbose_name='created' + ), + ), + ( + 'modified', + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, verbose_name='modified' + ), + ), + ('name', models.CharField(max_length=200)), + ('description', models.TextField(blank=True)), + ('public', models.BooleanField(default=False)), + ('official', models.BooleanField(default=False)), + ('locked', models.BooleanField(default=False)), + ( + 'creator', + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL + ), + ), + ], + options={ + 'get_latest_by': 'modified', + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Doi', + fields=[ + ( + 'created', + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, verbose_name='created' + ), + ), + ( + 'modified', + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, verbose_name='modified' + ), + ), + ( + 'id', + models.CharField( + max_length=30, + primary_key=True, + serialize=False, + validators=[django.core.validators.RegexValidator('^\\d+\\.\\d+/\\d+$')], + ), + ), + ('url', models.CharField(max_length=200)), + ], + options={ + 'get_latest_by': 'modified', + 'abstract': False, + }, + ), + migrations.CreateModel( + name='GirderDataset', + fields=[ + ( + 'id', + models.CharField( + max_length=24, + primary_key=True, + serialize=False, + validators=[django.core.validators.RegexValidator('^[0-9a-f]{24}$')], + ), + ), + ('name', models.CharField(max_length=255)), + ('public', models.BooleanField()), + ], + options={ + 'ordering': ['id'], + }, + ), + migrations.CreateModel( + name='Image', + fields=[ + ( + 'id', + models.BigAutoField( + auto_created=True, primary_key=True, serialize=False, verbose_name='ID' + ), + ), + ( + 'modified', + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, verbose_name='modified' + ), + ), + ( + 'created', + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, db_index=True + ), + ), + ('public', models.BooleanField(db_index=True, default=False)), + ( + 'accession', + models.OneToOneField( + on_delete=django.db.models.deletion.PROTECT, to='ingest.accession' + ), + ), + ], + options={ + 'ordering': ['-created'], + 'get_latest_by': 'created', + 'abstract': False, + }, + ), + migrations.CreateModel( + name='IsicId', + fields=[ + ( + 'id', + models.CharField( + default=isic.core.models.isic_id._default_id, + max_length=12, + primary_key=True, + serialize=False, + validators=[django.core.validators.RegexValidator('^ISIC_[0-9]{7}$')], + verbose_name='ISIC ID', + ), + ), + ], + ), + migrations.CreateModel( + name='Segmentation', + fields=[ + ( + 'id', + models.BigAutoField( + auto_created=True, primary_key=True, serialize=False, verbose_name='ID' + ), + ), + ( + 'created', + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, verbose_name='created' + ), + ), + ( + 'modified', + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, verbose_name='modified' + ), + ), + ( + 'girder_id', + models.CharField( + max_length=24, + unique=True, + validators=[django.core.validators.RegexValidator('^[0-9a-f]{24}$')], + ), + ), + ('mask', s3_file_field.fields.S3FileField(null=True)), + ('meta', models.JSONField(default=dict)), + ( + 'creator', + models.ForeignKey( + on_delete=django.db.models.deletion.RESTRICT, to=settings.AUTH_USER_MODEL + ), + ), + ( + 'image', + models.ForeignKey( + on_delete=django.db.models.deletion.RESTRICT, to='core.image' + ), + ), + ], + options={ + 'ordering': ['id'], + }, + ), + migrations.CreateModel( + name='SegmentationReview', + fields=[ + ( + 'id', + models.BigAutoField( + auto_created=True, primary_key=True, serialize=False, verbose_name='ID' + ), + ), + ( + 'created', + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, verbose_name='created' + ), + ), + ( + 'modified', + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, verbose_name='modified' + ), + ), + ('approved', models.BooleanField()), + ( + 'skill', + models.CharField( + choices=[('novice', 'novice'), ('expert', 'expert')], max_length=6 + ), + ), + ( + 'creator', + models.ForeignKey( + on_delete=django.db.models.deletion.RESTRICT, to=settings.AUTH_USER_MODEL + ), + ), + ( + 'segmentation', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name='reviews', + to='core.segmentation', + ), + ), + ], + options={ + 'get_latest_by': 'modified', + 'abstract': False, + }, + ), + migrations.CreateModel( + name='ImageShare', + fields=[ + ( + 'id', + models.BigAutoField( + auto_created=True, primary_key=True, serialize=False, verbose_name='ID' + ), + ), + ( + 'created', + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, verbose_name='created' + ), + ), + ( + 'modified', + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, verbose_name='modified' + ), + ), + ( + 'creator', + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name='shares', + to=settings.AUTH_USER_MODEL, + ), + ), + ( + 'image', + models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.image'), + ), + ( + 'recipient', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL + ), + ), + ], + options={ + 'get_latest_by': 'modified', + 'abstract': False, + }, + ), + migrations.CreateModel( + name='ImageAlias', + fields=[ + ( + 'id', + models.BigAutoField( + auto_created=True, primary_key=True, serialize=False, verbose_name='ID' + ), + ), + ( + 'created', + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, verbose_name='created' + ), + ), + ( + 'modified', + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, verbose_name='modified' + ), + ), + ( + 'image', + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name='aliases', + to='core.image', + ), + ), + ( + 'isic', + models.OneToOneField( + editable=False, + on_delete=django.db.models.deletion.PROTECT, + to='core.isicid', + ), + ), + ], + options={ + 'verbose_name_plural': 'Image aliases', + }, + ), + migrations.AddField( + model_name='image', + name='isic', + field=models.OneToOneField( + default=isic.core.models.isic_id.IsicId.safe_create, + editable=False, + on_delete=django.db.models.deletion.PROTECT, + to='core.isicid', + verbose_name='isic id', + ), + ), + migrations.AddField( + model_name='image', + name='shares', + field=models.ManyToManyField(through='core.ImageShare', to=settings.AUTH_USER_MODEL), + ), + migrations.CreateModel( + name='GirderImage', + fields=[ + ( + 'id', + models.BigAutoField( + auto_created=True, primary_key=True, serialize=False, verbose_name='ID' + ), + ), + ( + 'status', + models.CharField( + choices=[ + ('unknown', 'Unknown'), + ('non_image', 'Non-Image'), + ('corrupt', 'Corrupt'), + ('migrated', 'Migrated'), + ('true_duplicate', 'True Duplicate'), + ], + default='unknown', + max_length=30, + ), + ), + ('pre_review', models.BooleanField(null=True)), + ( + 'item_id', + models.CharField( + db_index=True, + editable=False, + max_length=24, + unique=True, + validators=[django.core.validators.RegexValidator('^[0-9a-f]{24}$')], + ), + ), + ( + 'file_id', + models.CharField( + editable=False, + max_length=24, + unique=True, + validators=[django.core.validators.RegexValidator('^[0-9a-f]{24}$')], + ), + ), + ('original_filename', models.CharField(editable=False, max_length=255)), + ( + 'original_file_relpath', + models.CharField(blank=True, editable=False, max_length=255), + ), + ('metadata', models.JSONField(blank=True, default=dict, editable=False)), + ( + 'unstructured_metadata', + models.JSONField(blank=True, default=dict, editable=False), + ), + ( + 'original_blob_dm', + models.CharField( + editable=False, + max_length=64, + validators=[django.core.validators.RegexValidator('^[0-9a-f]{64}$')], + ), + ), + ( + 'stripped_blob_dm', + models.CharField( + blank=True, + editable=False, + max_length=64, + validators=[django.core.validators.RegexValidator('^[0-9a-f]{64}$')], + ), + ), + ('raw', models.JSONField(blank=True, null=True)), + ( + 'accession', + models.OneToOneField( + blank=True, + editable=False, + null=True, + on_delete=django.db.models.deletion.CASCADE, + to='ingest.accession', + ), + ), + ( + 'dataset', + models.ForeignKey( + editable=False, + on_delete=django.db.models.deletion.PROTECT, + related_name='images', + to='core.girderdataset', + ), + ), + ( + 'isic', + models.OneToOneField( + editable=False, + on_delete=django.db.models.deletion.PROTECT, + to='core.isicid', + ), + ), + ], + options={ + 'ordering': ['item_id'], + }, + ), + migrations.CreateModel( + name='CollectionShare', + fields=[ + ( + 'id', + models.BigAutoField( + auto_created=True, primary_key=True, serialize=False, verbose_name='ID' + ), + ), + ( + 'created', + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, verbose_name='created' + ), + ), + ( + 'modified', + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, verbose_name='modified' + ), + ), + ( + 'collection', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to='core.collection' + ), + ), + ( + 'creator', + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name='collection_shares_given', + to=settings.AUTH_USER_MODEL, + ), + ), + ( + 'recipient', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name='collection_shares_received', + to=settings.AUTH_USER_MODEL, + ), + ), + ], + options={ + 'get_latest_by': 'modified', + 'abstract': False, + }, + ), + migrations.AddField( + model_name='collection', + name='doi', + field=models.OneToOneField( + blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='core.doi' + ), + ), + migrations.AddField( + model_name='collection', + name='images', + field=models.ManyToManyField(related_name='collections', to='core.image'), + ), + migrations.AddField( + model_name='collection', + name='shares', + field=models.ManyToManyField( + related_name='collection_shares', + through='core.CollectionShare', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AddConstraint( + model_name='imageshare', + constraint=models.CheckConstraint( + check=models.Q( + ('creator', django.db.models.expressions.F('recipient')), _negated=True + ), + name='imageshare_creator_recipient_diff_check', + ), + ), + migrations.AddConstraint( + model_name='girderimage', + constraint=models.CheckConstraint( + check=models.Q( + ('status', 'unknown'), + ('status', 'non_image'), + ('accession__isnull', False), + _connector='OR', + ), + name='non_unknown_have_accession', + ), + ), + migrations.AddConstraint( + model_name='girderimage', + constraint=models.CheckConstraint( + check=models.Q( + ('status', 'non_image'), + models.Q(('stripped_blob_dm', ''), _negated=True), + _connector='OR', + ), + name='non_non_image_have_stripped_blob_dm', + ), + ), + migrations.AddConstraint( + model_name='collectionshare', + constraint=models.CheckConstraint( + check=models.Q( + ('creator', django.db.models.expressions.F('recipient')), _negated=True + ), + name='collectionshare_creator_recipient_diff_check', + ), + ), + migrations.AddConstraint( + model_name='collection', + constraint=models.UniqueConstraint( + condition=models.Q(('official', True)), + fields=('name',), + name='collection_official_has_unique_name', + ), + ), + migrations.AlterUniqueTogether( + name='collection', + unique_together={('creator', 'name')}, + ), + migrations.RunPython(create_elasticsearch_index), + ] diff --git a/isic/core/migrations/0002_merge_default_site.py b/isic/core/migrations/0002_merge_default_site.py new file mode 100644 index 00000000..29e75017 --- /dev/null +++ b/isic/core/migrations/0002_merge_default_site.py @@ -0,0 +1,11 @@ +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0001_default_site'), + ('core', '0001_initial_squashed'), + ] + + operations = [] diff --git a/isic/login/migrations/0001_initial_squashed.py b/isic/login/migrations/0001_initial_squashed.py new file mode 100644 index 00000000..e9fe7d7b --- /dev/null +++ b/isic/login/migrations/0001_initial_squashed.py @@ -0,0 +1,65 @@ +from django.conf import settings +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + replaces = [ + ('login', '0001_default_site'), + ('login', '0001_initial'), + ('login', '0002_merge_default_site'), + ('login', '0003_remove_profile_email_verified'), + ('login', '0004_auto_20210609_1909'), + ('login', '0004_user_profile'), + ('login', '0005_profile_hash_id'), + ('login', '0006_alter_profile_hash_id'), + ('login', '0007_profile_accepted_terms'), + ('login', '0008_id_big_auto_field'), + ] + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Profile', + fields=[ + ( + 'id', + models.BigAutoField( + auto_created=True, primary_key=True, serialize=False, verbose_name='ID' + ), + ), + ( + 'girder_id', + models.CharField( + blank=True, + max_length=24, + null=True, + unique=True, + validators=[django.core.validators.RegexValidator('^[0-9a-f]{24}$')], + ), + ), + ('girder_salt', models.CharField(blank=True, max_length=60)), + ( + 'hash_id', + models.CharField( + max_length=5, + unique=True, + validators=[django.core.validators.RegexValidator('^[A-HJ-NP-Z2-9]{5}')], + ), + ), + ('accepted_terms', models.DateTimeField(null=True)), + ( + 'user', + models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL + ), + ), + ], + ), + ] diff --git a/isic/stats/migrations/0001_initial_squashed.py b/isic/stats/migrations/0001_initial_squashed.py new file mode 100644 index 00000000..a867ad94 --- /dev/null +++ b/isic/stats/migrations/0001_initial_squashed.py @@ -0,0 +1,107 @@ +from django.db import migrations, models +import django.db.models.deletion +import django.db.models.expressions +import django_extensions.db.fields + + +class Migration(migrations.Migration): + replaces = [ + ('stats', '0001_initial'), + ('stats', '0002_imagedownload'), + ('stats', '0003_auto_20220306_0902'), + ('stats', '0004_id_big_auto_field'), + ('stats', '0005_imagedownload_user_agent'), + ] + + initial = True + + dependencies = [ + ('core', '0002_merge_default_site'), + ] + + operations = [ + migrations.CreateModel( + name='GaMetrics', + fields=[ + ( + 'id', + models.BigAutoField( + auto_created=True, primary_key=True, serialize=False, verbose_name='ID' + ), + ), + ( + 'created', + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, verbose_name='created' + ), + ), + ( + 'modified', + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, verbose_name='modified' + ), + ), + ('range_start', models.DateTimeField()), + ('range_end', models.DateTimeField()), + ('num_sessions', models.PositiveIntegerField()), + ('sessions_per_country', models.JSONField()), + ], + options={ + 'get_latest_by': 'modified', + 'abstract': False, + }, + ), + migrations.CreateModel( + name='ImageDownload', + fields=[ + ( + 'id', + models.BigAutoField( + auto_created=True, primary_key=True, serialize=False, verbose_name='ID' + ), + ), + ( + 'modified', + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, verbose_name='modified' + ), + ), + ( + 'created', + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, db_index=True + ), + ), + ('download_time', models.DateTimeField()), + ('ip_address', models.GenericIPAddressField()), + ('user_agent', models.CharField(max_length=200, null=True)), + ('request_id', models.CharField(max_length=200, unique=True)), + ( + 'image', + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name='downloads', + to='core.image', + ), + ), + ], + options={ + 'get_latest_by': 'modified', + 'abstract': False, + }, + ), + migrations.AddConstraint( + model_name='gametrics', + constraint=models.CheckConstraint( + check=models.Q(('range_start__lt', django.db.models.expressions.F('range_end'))), + name='range_end_gt_range_start', + ), + ), + migrations.AddConstraint( + model_name='imagedownload', + constraint=models.CheckConstraint( + check=models.Q(('download_time__lt', django.db.models.expressions.F('created'))), + name='download_occurred_before_tracking', + ), + ), + ] diff --git a/isic/studies/migrations/0004_auto_20210520_0446.py b/isic/studies/migrations/0004_auto_20210520_0446.py index 5bed556f..a7ce04f2 100644 --- a/isic/studies/migrations/0004_auto_20210520_0446.py +++ b/isic/studies/migrations/0004_auto_20210520_0446.py @@ -7,7 +7,7 @@ class Migration(migrations.Migration): dependencies = [ - ('core', '0004_auto_20210519_2247'), + ('core', '0001_initial_squashed'), ('studies', '0003_auto_20210115_2031'), ] diff --git a/isic/studies/migrations/0005_auto_20210520_1637.py b/isic/studies/migrations/0005_auto_20210520_1637.py index 8d4952f9..2b4ddf95 100644 --- a/isic/studies/migrations/0005_auto_20210520_1637.py +++ b/isic/studies/migrations/0005_auto_20210520_1637.py @@ -9,7 +9,7 @@ class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('core', '0004_auto_20210519_2247'), + ('core', '0001_initial_squashed'), ('studies', '0004_auto_20210520_0446'), ] diff --git a/isic/studies/migrations/0007_auto_20210520_1643.py b/isic/studies/migrations/0007_auto_20210520_1643.py index 81a5e6b0..c434e249 100644 --- a/isic/studies/migrations/0007_auto_20210520_1643.py +++ b/isic/studies/migrations/0007_auto_20210520_1643.py @@ -7,7 +7,7 @@ class Migration(migrations.Migration): dependencies = [ - ('core', '0004_auto_20210519_2247'), + ('core', '0001_initial_squashed'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('studies', '0006_delete_image'), ] diff --git a/isic/studies/migrations/0022_auto_20220222_0012.py b/isic/studies/migrations/0022_auto_20220222_0012.py index 6deceabf..4009cef6 100644 --- a/isic/studies/migrations/0022_auto_20220222_0012.py +++ b/isic/studies/migrations/0022_auto_20220222_0012.py @@ -8,7 +8,7 @@ class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('core', '0034_auto_20220217_1853'), + ('core', '0001_initial_squashed'), ('studies', '0021_study_owners'), ] diff --git a/isic/studies/migrations/0023_study_collection.py b/isic/studies/migrations/0023_study_collection.py index 7833112c..019fd99c 100644 --- a/isic/studies/migrations/0023_study_collection.py +++ b/isic/studies/migrations/0023_study_collection.py @@ -7,7 +7,7 @@ class Migration(migrations.Migration): dependencies = [ - ('core', '0034_auto_20220217_1853'), + ('core', '0001_initial_squashed'), ('studies', '0022_auto_20220222_0012'), ] diff --git a/isic/studies/migrations/0025_alter_study_collection.py b/isic/studies/migrations/0025_alter_study_collection.py index a4fac4e8..9ba63d64 100644 --- a/isic/studies/migrations/0025_alter_study_collection.py +++ b/isic/studies/migrations/0025_alter_study_collection.py @@ -7,7 +7,7 @@ class Migration(migrations.Migration): dependencies = [ - ('core', '0034_auto_20220217_1853'), + ('core', '0001_initial_squashed'), ('studies', '0024_auto_20220222_0053'), ] diff --git a/isic/studies/migrations/0027_auto_20220223_0136.py b/isic/studies/migrations/0027_auto_20220223_0136.py index 790389bd..50627dd6 100644 --- a/isic/studies/migrations/0027_auto_20220223_0136.py +++ b/isic/studies/migrations/0027_auto_20220223_0136.py @@ -7,7 +7,7 @@ class Migration(migrations.Migration): dependencies = [ - ('core', '0034_auto_20220217_1853'), + ('core', '0001_initial_squashed'), ('studies', '0026_alter_study_name'), ]