Django Filefield路径取决于文件夹。奇怪的错误?

时间:2017-07-31 16:44:44

标签: python django django-models

当我从项目的根类别运行shell时,我得到以下结果:

>>> from generations.models import *
>>> Generation.objects.all().first().file.path
'/Users/marijus/workspace/preeti/media/data/58/input/IRIS.csv'

哪个好,我想要什么。

但是当我从其他目录运行带有django context的shell或任何其他脚本时,我得到以下结果:

─$ cd scripts 
╰─$ python ../manage.py shell
>>> from generations.models import *
>>> Generation.objects.all().first().file.path
'/Users/marijus/workspace/preeti/scripts/media/data/58/input/IRIS.csv'

注意在/ media之前附加的脚本,当我尝试从脚本目录访问该文件时会导致错误。

我的模特:

def get_upload_path(instance, filename):
    return "media/data/%s/input/%s" % (instance.id, filename)

class Generation(models.Model):
    file = models.FileField(upload_to=get_upload_path, blank=True, null=True)

这是某种bug还是FileField的路径应该依赖于我试图访问它的文件夹。

1 个答案:

答案 0 :(得分:0)

Django的FileStorage uses os.abspath获取文件位置。另一方面,os.abspath calls os.getcwd获取路径。这就是导致路径相对于当前目录的原因,这在本地环境中很有用。

如果要将其设置为某个绝对位置,则需要设置MEDIA_ROOT setting