backend/image_markuper/dicom/models/base.py

92 lines
3.4 KiB
Python
Raw Normal View History

2022-10-26 23:22:04 +03:00
from django.contrib.auth import get_user_model
from django.db import models
2022-10-28 22:17:29 +03:00
from django.urls import reverse
2022-10-26 23:22:04 +03:00
from utils.files import media_upload_path
User = get_user_model()
2022-11-01 12:20:43 +03:00
class Project(models.Model):
2022-11-05 22:14:19 +03:00
class PathologyType(models.IntegerChoices):
no_pathology = 0, "Без патологий"
covid_pathology_all = 1, "COVID-19; все доли; многочисленные; размер любой"
covid_pathology_lung = (
2,
"COVID-19; Нижняя доля правого лёгкого, Нижняя доля левого лёгкого",
)
few = 3, "Немногочисленные; 10-20 мм"
lung_cancer_lower_right = (
4,
"Рак лёгкого; Нижняя доля правого лёгкого, Единичное; 10-20 мм",
)
lung_cancer_middle_right = (
5,
"Рак лёгкого; Средняя доля правого лёгкого, Единичное; >20 мм",
)
lung_cancer_lower_left = (
6,
"Рак лёгкого; Нижняя доля левого лёгкого, Единичное; 10-20 мм",
)
lung_cancer_upper_right = (
7,
"Рак лёгкого; Верхняя доля правого лёгкого, Единичное; 5-10 мм",
)
lung_cancer_upper_left = (
8,
"Рак лёгкого; Верхняя доля левого лёгкого, Единичное; 5-10 мм",
)
lung_cancer_all_many_small = (
9,
"Метастатическое поражение лёгких; Все доли; Многочисленные; 5-10 мм",
)
lung_cancer_all_many_big = (
10,
"Метастатическое поражение лёгких; Все доли; Многочисленные; 10-20 мм",
)
lung_cancer_all_few_small = (
11,
"Метастатическое поражение лёгких; Все доли; Немногочисленные; 5-10 мм",
)
name = models.CharField(max_length=200)
pathology_type = models.IntegerField(choices=PathologyType.choices, default=0)
2022-11-01 12:20:43 +03:00
user = models.ForeignKey(User, related_name="projects", on_delete=models.CASCADE)
slug = models.SlugField(max_length=10)
2022-11-03 23:15:25 +03:00
stl = models.FileField(blank=True)
2022-11-01 12:20:43 +03:00
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.user.username}'s project"
2022-10-29 22:46:19 +03:00
2022-10-26 23:22:04 +03:00
class Dicom(models.Model):
slug = models.SlugField()
file = models.FileField(upload_to=media_upload_path)
uploaded = models.DateTimeField(auto_now_add=True)
2022-11-01 12:20:43 +03:00
project = models.ForeignKey(
Project, related_name="files", null=True, on_delete=models.SET_NULL
2022-10-29 22:46:19 +03:00
)
2022-10-28 22:17:29 +03:00
2022-10-26 23:22:04 +03:00
def __str__(self):
return self.file.name
2022-10-28 22:17:29 +03:00
def get_absolute_url(self):
return reverse("get_update_delete_dicom", kwargs={"slug": self.slug})
2022-11-05 22:14:19 +03:00
class Layer(models.Model):
parent = models.ForeignKey(
"self", related_name="children", blank=True, null=True, on_delete=models.CASCADE
)
dicom = models.ForeignKey(Dicom, related_name="layers", on_delete=models.CASCADE)
name = models.CharField(max_length=200)
slug = models.SlugField(max_length=8)
def __str__(self):
return f"layer on {self.dicom}"