From f33212fc61e6386714b3e2313fbb0c752982b320 Mon Sep 17 00:00:00 2001 From: Dan LaManna Date: Fri, 16 Feb 2024 14:19:01 -0500 Subject: [PATCH] Add a database field for primary_biopsy --- .../0050_accession_primary_biopsy.py | 18 ++++++++++++++++++ isic/ingest/models/accession.py | 14 ++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 isic/ingest/migrations/0050_accession_primary_biopsy.py diff --git a/isic/ingest/migrations/0050_accession_primary_biopsy.py b/isic/ingest/migrations/0050_accession_primary_biopsy.py new file mode 100644 index 00000000..bfc91e12 --- /dev/null +++ b/isic/ingest/migrations/0050_accession_primary_biopsy.py @@ -0,0 +1,18 @@ +# Generated by Django 4.1.13 on 2024-02-16 19:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("ingest", "0049_alter_accession_blob_size_alter_accession_height_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="accession", + name="primary_biopsy", + field=models.BooleanField(db_index=True, default=False), + ), + ] diff --git a/isic/ingest/models/accession.py b/isic/ingest/models/accession.py index cc772dcc..a6950a1a 100644 --- a/isic/ingest/models/accession.py +++ b/isic/ingest/models/accession.py @@ -197,6 +197,8 @@ class Meta(CreationSortedTimeStampedModel.Meta): Patient, on_delete=models.SET_NULL, null=True, blank=True, related_name="accessions" ) + primary_biopsy = models.BooleanField(default=False, db_index=True) + objects = AccessionQuerySet.as_manager() def __str__(self) -> str: @@ -499,3 +501,15 @@ def remove_unstructured_metadata( self.save() return modified + + def full_clean(self, *args, **kwargs): + if ( + self.lesion + and self.primary_biopsy + and self.cohort.accessions.filter(lesion=self.lesion, primary_biopsy=True).exclude( + pk=self.pk + ) + ): + raise ValidationError("Lesion already has a primary biopsy.") + + return super().full_clean(*args, **kwargs)