微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

与父类别和子类别相关联的 Django mptt 渲染项目

如何解决与父类别和子类别相关联的 Django mptt 渲染项目

我正在为病理学/实验室报告系统构建一个 django 应用程序。我需要一个表格,它可以为不同的测试(例如(HIV 阴性,一些测试 10))取值。由于有 100 和 1000 个测试,这些测试按化学测试、显微镜测试等类别分组。我需要为这些测试渲染一个带有表单的模板。我使用了 django-mptt 并且在 django admin 中构建结构似乎很容易,但我无法让它在前端模板中工作。以下是我的项目代码和描述。


class TestCategory(MPTTModel):
    name = models.CharField(max_length=100)
    parent = TreeForeignKey('self',on_delete=models.CASCADE,null=True,blank=True,related_name='children')
    is_active = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_Now_add=True)
    update_at = models.DateTimeField(auto_Now=True)

    class Meta:
        verbose_name_plural = "Test Categories"

    class MPTTMeta:
        order_insertion_by = ['name']
    
    def __str__(self):
        return self.name


class Test(models.Model):
    QUALITATIVE = "1"
    QUANTITATIVE = "0"
    TEST_TYPE_CHOICES = [
        (QUALITATIVE,'QUALITATIVE'),(QUANTITATIVE,'QUANTITATIVE'),]
    test_category = TreeForeignKey(TestCategory,related_name='test_category')
    name = models.CharField(max_length=50)
    unit = models.CharField(max_length=10)
    specimen = models.ForeignKey(Specimen,null=True)
    test_type = models.CharField(max_length=2,choices=TEST_TYPE_CHOICES,default=QUALITATIVE)
    reference_text = models.TextField()
    price = models.DecimalField(max_digits=10,decimal_places=2,default=0,verbose_name='Price Per Unit')
    is_active = models.BooleanField(default=True)

    def __str__(self):
        return self.name
    
    class Meta:
        ordering = ['test_category']
    

# views.py

def report_create_view(request,pk): 
context ={} 
form = CreateReportForm(request.POST or None) 

if form.is_valid(): 
    patient = self.objects.all().filter(patient_id=pk)
    form.instance.patient_id = patient.patient_id
    form.save() 
        
context['form']= form 
context['patient'] = Patient.objects.all().filter(pk=pk)
context['nodes'] = TestCategory.objects.all()
return render(request,"lab/report_form.html",context) 

#template report_form.html

{% load crispy_forms_tags %}
{% load mptt_tags %}
    <form method="post" novalidate>
    {% csrf_token %}
    {{ form|crispy }}
  
   {% for node,structure in nodes|tree_info %}
        {% if structure.new_level %}<ul><li>{% else %}</li><li>{% endif %}
            {{ node.name }}
        {% for level in structure.closed_levels %}</li></ul>{% endfor %}
    {% endfor %}
    
    <button type="submit" class="btn btn-success">Add Report</button>
  </form>

这就是我的模板现在的样子。如您所见,我的表单只有类别名称(我得到的只有 TestCategory 模型节点实际的测试模型。如何实际呈现按类别分组的测试?

result

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?