我是Django的新手,我正在寻找解决以下问题的最佳方法。
我有一个正在生成两个报告的应用程序。一个是JSON Blob,因此我将其与使用JSONField的数据模型一起存储在psql中。 第二个报告是一个.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的预期用途?
答案 0 :(得分:0)
TextField不存储文件,Django为此提供了一个FileField(请参见here)。这会将文件保存到某个位置/文件夹,并且保存在数据库中的对象实际上存储了该位置,您可以然后再访问。类似这样的东西:
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'):