当我从项目的根类别运行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的路径应该依赖于我试图访问它的文件夹。
答案 0 :(得分:0)
Django的FileStorage
uses os.abspath
获取文件位置。另一方面,os.abspath
calls os.getcwd
获取路径。这就是导致路径相对于当前目录的原因,这在本地环境中很有用。
如果要将其设置为某个绝对位置,则需要设置MEDIA_ROOT
setting。