from django.db import models
from typing import List
class FindingMorphologyClassificationTypeManager(models.Manager):
def get_by_natural_key(self, name):
return self.get(name=name)
[docs]
class FindingMorphologyClassificationType(models.Model):
name = models.CharField(max_length=255, unique=True)
name_de = models.CharField(max_length=255, blank=True)
name_en = models.CharField(max_length=255, blank=True)
description = models.TextField(blank=True)
objects = FindingMorphologyClassificationTypeManager()
[docs]
def natural_key(self):
return (self.name,)
def __str__(self):
return str(self.name)
[docs]
@classmethod
def get_required_classifications_for_finding(cls, finding):
"""
Returns all required morphology classification types for a given finding.
"""
required_classification_types = [
_ for _ in finding.required_morphology_classification_types.all()
]
return required_classification_types
class FindingMorphologyClassificationManager(models.Manager):
def get_by_natural_key(self, name):
return self.get(name=name)
[docs]
class FindingMorphologyClassification(models.Model):
name = models.CharField(max_length=255, unique=True)
name_de = models.CharField(max_length=255, blank=True)
name_en = models.CharField(max_length=255, blank=True)
description = models.TextField(blank=True)
classification_type = models.ForeignKey(FindingMorphologyClassificationType, on_delete=models.CASCADE)
objects = FindingMorphologyClassificationManager()
[docs]
def natural_key(self):
return (self.name,)
def __str__(self):
return str(self.name)
[docs]
def get_choices(self):
choices: List[FindingMorphologyClassificationChoice] = [_ for _ in self.choices.all()]
return choices
class FindingMorphologyClassificationChoiceManager(models.Manager):
def get_by_natural_key(self, name):
return self.get(name=name)
[docs]
class FindingMorphologyClassificationChoice(models.Model):
name = models.CharField(max_length=255, unique=True)
name_de = models.CharField(max_length=255, blank=True)
name_en = models.CharField(max_length=255, blank=True)
description = models.TextField(blank=True)
classification = models.ForeignKey(
FindingMorphologyClassification,
on_delete=models.CASCADE,
related_name='choices'
)
subcategories = models.JSONField(
default = dict
)
numerical_descriptors = models.JSONField(
default = dict
)
objects = FindingMorphologyClassificationChoiceManager()
[docs]
def natural_key(self):
return (self.name,)
def __str__(self):
_str = f"{self.name} ({self.classification})"
return _str