Django:将ContentFile(或某种虚拟文件)保存到数据库

时间:2017-08-01 01:34:04

标签: django django-models django-datatable

在我的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而只是一个引用字符串。
  3. 基本上,我想做的是:String - > ContentFile(或某种形式的“虚拟”文件) - >物理文件由Django在数据库中保存条目时处理。

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

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

    1. 如何在不实际创建文件的情况下将文件保存到数据库(使用ContentFile保存条目后不会创建物理文件,这是我想要做的事情)
    2. 让django不上传给定文件,但使用已上传的版本,同时保留FileField提供的所有方法
    3. 我不明白。
    4. 我为[我的英语,我缺乏理解,缺乏透明度]道歉

      你需要知道的任何事情,我很乐意指明。

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

0 个答案:

没有答案