首页 > 解决方案 > 使用数据模型存储 .html 报告

问题描述

我是 Django 新手,我正在寻找解决以下问题的最佳方法。

我有一个生成两个报告的应用程序。一个是 JSON blob,所以我将它存储在 psql 中,数据模型使用 JSONField。第二个报告是一个 .html 文件。

.html 文件每天将生成多次,因此首先想到的是将其存储在数据库中。我还需要能够提取报告,以便它可以在 UI 中显示给用户。

我使用以下方法创建了一个测试数据模型TextField

class TestResultsHTML(models.Model):
    name = models.CharField(max_length=200)
    report = models.TextField()

它使它进入 Db 没问题,但是当我尝试检索它时,我似乎无法获得实际报告:

In [3]: html_results =  TestResultsHTML.objects.get(id=4)

In [4]: html_results.name
Out[4]: 'b0f5c336-867a-44a3-a5ef-6297bf6042cf'

In [5]: html_results.report
Out[5]: "<_io.TextIOWrapper name='report.html' mode='r' encoding='UTF-8'>"

我预计 .report 会返回文件的实际内容。文件本身是 1800+ 行。

这是一个好方法还是不是 TextField 的预期用途?

标签: django

解决方案


TextField 不存储文件,Django 有一个 FileField (见这里)。这会将文件保存到某个位置/文件夹,并且保存在数据库中的对象基本上存储了该位置,您以后可以访问该位置。像这样的东西:

class TestResultsHTML(models.Model):
    name = models.CharField(max_length=200)
    file_loc = models.FileField(upload_to=upload_location)

然后在以后打开文件,如下所示:

with open(html_results.file_loc, 'w'):

推荐阅读