3

在我的 django 应用程序中,我创建了一个字符串,我必须将其作为文件保存到我的数据库中。如果我理解正确,django 应该在我保存条目时自动上传文件:

class Foo(models.Model):
    bar1=models.ForeignKey(Table1)
    bar2=models.ForeignKey(Table2)
    res=models.FileField(upload_to='MYPATH')

问题是要创建Foo的实例,我必须首先在服务器磁盘上创建一个物理文件,这意味着将创建两个副本(一个由我创建以创建数据库条目,另一个由 django 在保存条目时创建)。

据我所见,我必须自己在“MYPATH”中创建文件,而不是使用 FileField,我必须在数据库中保存一个引用(本质上是 django 在做什么????)。但是我怀疑这是最好的方法

  1. 它并不像 Pythonesque 那样让我印象深刻。
  2. 我无法使用与使用真实 FileField 时相同的方法。例如,在调用它时,我不会有 FieldFile,而只有一个引用字符串。

基本上,我想做的是:字符串-> ContentFile(或某种形式的“虚拟”文件)-> Django 在数据库中保存条目时处理的物理文件。

entry = Foo(bar1=var1, bar2=var2, res=ContentFile(XMLSTRING))
entry.save()

这不起作用,但它显示了我想要实现的目标。所以,请告诉我以下三个之一:

  1. 如何在不物理创建文件的情况下将文件保存到数据库(使用 ContentFile 在保存我想要做的条目后不会创建物理文件)
  2. 让 django 不上传给定的文件,而是使用已经上传的版本,同时维护 FileField 提供的所有方法
  3. 什么我不明白。

我为[我的英语,我的理解不足,缺乏清晰度]道歉

任何你需要知道的,我很乐意指定。

编辑:我查看了这个线程,但是在那里,urlretrieve 创建了一个临时文件,这是我真的不想做的事情。也许我应该这样做,但有更好的方法吗?

4

0 回答 0