django - 如何为每个模型条目(Django)存储和呈现 Pandas 数据帧/CSV?
问题描述
我有一个代表单个患者的模型。它存储诸如patient_name
( CharField
)、weight
( IntegerField
)、height
( IntegerField
) 等信息。
我扩展了 save 方法save(self, *args, **kwargs)
以执行一系列计算/功能(例如计算 BMI)以保存回模型。对于扩展save()
方法,它还运行一个函数,计算 pandas 中的每周减肥目标并保存到文件夹patient_name
中的 CSV(以 命名) 。media
我正在尝试找出为每位患者显示该 CSV 数据的最佳方式。目前,我正在使用DetailView
CBV 为每位患者提供一个包含新计算模型字段的详细信息页面(例如<p>{{ object.patient_name }}'s calculated BMI is {{ object.bmi }}</p>
)
我有三个想法,但我不确定它们是否可行或如何实施。
1 - 我可以生成一个 HTML 表格而不是 CSV,有没有办法根据模型或主键 id 的特征从媒体文件夹呈现自定义 HTML 片段{% media|object.patient_name %}
?
2 - 我可以尝试将 pd.DataFrame、CSV(或 HTML 表的字符串文本表示)保存到新的模型字段(隐藏/可编辑 = False)并通过模板传递它,例如{{ object.html_table }}
. 我只是不确定从 TextField 存储和呈现 HTML 代码是否可能或安全。
3 - 我可以尝试将 CSV/df 保存为图像ImageField
并提供图像。理想情况下,会有一个像ImageField
这样的模型字段将 1:1 引用到 CSV 文件(或 HTML 表表示)并允许 Django 模板传递并呈现它。
如果有人在过去尝试过类似的事情或知道为每个模型条目/数据库行实现存储和呈现表的最佳方法,将不胜感激。
解决方案
我不确定这是否是最安全的方式,它看起来有点笨拙,但它确实有效。我基本上采用了#2方法
在我的后端逻辑中,我刚刚获得了数据框的表格表示形式的 HTML 字符串,html_table_str = df.to_html()
然后将字符串返回给我的模型html_table_str
我的后端逻辑.py:
def calculate_table(weight_kg, height_m):
multiplier_df = pd.read_csv(MEDIA_ROOT + '\multipliers.csv')
bmi = (weight_kg / (height_m ** 2)
total_df = (multiplier_df * bmi)
html_table_str = total_df.to_html()
return html_table_str
模型.py:
from django.db import models
from .mybackendlogic import calculate_table
class DoFoo(models.Model):
weight = models.IntegerField()
height = models.IntegerField()
html_table_str = models.TextField(editable=False) # hidden in views
def save(self, *args, **kwargs):
self.html_table_str = calculate_table(self.weight, self.height)
super(DoFoo, self).save(*args, **kwargs)
然后通过{{ object.html_table_str|safe }}
你的html模板
详细信息.html:
{% block content %}
<p class="">Here is your table, user </p>
{{ object.html_table_str|safe }}
{% endblock %}
推荐阅读
- python - 我似乎无法解决此代码(python 速成课程)
- javascript - nodejs中的基本udp NAT遍历?
- python - 从多个类组成 PyQt5 UI
- python - 如何调整图像大小但使用python保留像素值
- python - 如何在 django-rest-framework-simple-jwt 中使用自定义模型用户
- machine-learning - 是什么导致这个 LSTM 的准确率如此之低?
- java - 我的工具栏太高了,因为它看起来很丑,下面的屏幕被裁剪了,我该如何解决?
- django - 如何在 Django 模型中设置字段常量
- python - for in for 循环(for 并行工作)
- java - 如何在 Spring Mail 集成中启用 IMAPFolder 读写模式