首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django -如何在模型中使前端-可定制集/组?

Django -如何在模型中使前端-可定制集/组?
EN

Stack Overflow用户
提问于 2022-07-25 16:32:49
回答 2查看 30关注 0票数 0

我正在尝试创建一个处理实验室分析的应用程序--类似于实验室信息系统(LIS)

问题是我不知道该采取哪种方法。

我打算这样做:

“分析”表--由分析的“名称”、"ID“组成

“探测”表--“名称”、"ID“、”引用“、”价值“、”测量“。

此外,探测将具有将其链接到特定“分析”实例的字段。

因此,它将是“分析#1”-> "PROBE1","PROBE2","PROBE3“

“分析#2”-> "PROBE1“"PROBE3”

诸若此类。

操作人员应该能够在一个“视图”(如“实验室设置”)和另一个视图中通过前端向此分析添加新的分析和探测,以输入此分析实例的值(所有分析实例都将链接到某个“访问”(服务案例))。

我应该采取什么方法来规划应用程序和模型?它是一些元类,还是仅仅是多个表链接“多到一个”或“多个多义”?

如有任何建议,我将不胜感激!

EN

回答 2

Stack Overflow用户

发布于 2022-07-26 15:59:36

关于这一点,没有什么是ManyToOne关系无法处理的特别复杂的。你的模特会是这样的:

代码语言:javascript
复制
class Visit(models.Model):
   ...

class Analysis(models.Model):
   visit = models.ForeignKey(Visit, ...
   ...

class Probe(models.Model):
   analysis = models.ForeignKey(Analysis, ...
   ...

如果许多探针可以附加到不同的分析或分析访问,然后使用ManyToManyField而不是ForeignKey,请注意,在Django中处理m2m的工作方式与m21关系不同。

https://docs.djangoproject.com/en/4.0/topics/db/examples/many_to_one/

https://docs.djangoproject.com/en/4.0/topics/db/examples/many_to_many/

票数 0
EN

Stack Overflow用户

发布于 2022-07-30 14:04:33

谢谢你的回答!

目前,如果有人感兴趣的话,我正在做类似的事情。也许有更简单的方法,但到目前为止,它符合我的需要。

代码语言:javascript
复制
import uuid

from django.db import models


# Create your models here.

class Patient(models.Model):
    class Gender(models.TextChoices):
        male = "Муж"
        female = "Жен"

    surname = models.CharField("Фамилия", max_length=200)
    name = models.CharField("Имя", max_length=200)
    fathname = models.CharField("Отчество", max_length=200)
    created = models.DateTimeField("Добавлен", auto_now_add=True)
    id = models.AutoField("Идентификатор", primary_key=True)
    dateofbirth = models.DateField("Дата рождения", null=True, blank=True)
    gender = models.CharField("Пол", max_length=3, choices=Gender.choices, default=Gender.male)
    snils = models.DecimalField("СНИЛС", max_digits=11, decimal_places=0, null=True, blank=True)

    class Meta:
        ordering = ['-created']

    def returnFIO(self):
        return self.surname + " " + self.name + " " + self.fathname

    def returnAge(self):
        import datetime
        return (datetime.date.today() - self.dateofbirth) / 365 

    def __str__(self):
        return self.surname + " " + self.name + " " + self.fathname


class Visit(models.Model):
    patient = models.ForeignKey(Patient, on_delete=models.CASCADE, verbose_name="Пациент")
    id = models.AutoField("Идентификатор", primary_key=True)
    created = models.DateTimeField("Добавлен", auto_now_add=True)

    class Meta:
        ordering = ['-created']

    def returnCreated(self):
        return self.created
    def __str__(self):
        return str(self.id) + " / " + str(self.created)


from django.db import models
import uuid
from patients.models import Visit


# Create your models here.

class Analiz(models.Model):
    name = models.CharField(max_length=200, blank=True, null=True)
    description = models.CharField(max_length=200, blank=True, null=True)
    id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)

    def __str__(self):
        return str(self.name)


class AnalizInst(models.Model):
    analiz = models.ForeignKey(Analiz, on_delete=models.CASCADE, null=True)
    id = models.AutoField(primary_key=True)
    created = models.DateTimeField(auto_now_add=True)
    related_to_visit = models.ForeignKey(Visit, on_delete=models.CASCADE, null=True)

    def __str__(self):
        return str(self.analiz) + ' / ' + str(self.id)


class Measurement(models.Model):
    id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)
    name = models.CharField(max_length=200, blank=True, null=True)

    def __str__(self):
        return self.name


class Probe(models.Model):
    name = models.CharField("Название теста", max_length=200, blank=True, null=True)
    description = models.CharField("Описание", max_length=200, blank=True, null=True)
    id = models.UUIDField("Идентификатор", default=uuid.uuid4, unique=True, primary_key=True, editable=False)
    related_to_analiz = models.ForeignKey(Analiz, on_delete=models.CASCADE, null=True, verbose_name="Привязка к анализу")
    digits = models.IntegerField("Цифр после запятой", null=True, blank=True)
    measurement = models.ForeignKey(Measurement, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="Измерение")
    probeIsDigital = models.BooleanField("Числовой", default=True)
    referenceText = models.CharField("Референс текст", max_length=50, blank=True, null=True)
    referenceMin = models.DecimalField("Референс MIN", max_digits=10, decimal_places=5, null=True, blank=True)
    referenceMax = models.DecimalField("Референс MAX", max_digits=10, decimal_places=5, null=True, blank=True)
    defaultInUse = models.BooleanField("Включен по умолчанию", default=True)
    hl7Name = models.CharField("Имя в анализаторе", max_length=200, blank=True, null=True)
    defaultText = models.CharField("Текст значения по умолчанию", max_length=200, blank=True, null=True)

    def __str__(self):
        return str(self.name)


class ProbeInst(models.Model):
    value = models.DecimalField("Значение", max_digits=10, decimal_places=5, null=True, blank=True)
    textvalue = models.CharField("Текстовое значение", max_length=200, blank=True, null=True)
    probe = models.ForeignKey(Probe, on_delete=models.CASCADE, null=True, verbose_name="Тест")
    id = models.AutoField("Идентификатор", primary_key=True)
    related_to_analyse = models.ForeignKey(AnalizInst, on_delete=models.CASCADE, null=True, verbose_name="Привязка к анализу")
    created = models.DateTimeField("Создан", auto_now_add=True)
    inUse = models.BooleanField("В работе", default=True)

    def __str__(self):
        return str(self.probe)

此外,我还计划构建一些用于手工输入的UI和表单输入,并与HL7标准进行一些集成,以直接从实验室分析器加载数据。

Django是迄今为止我在编程中遇到的最好的事情)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73112578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档