Как получить ссылку на файл в поле FileField?

как я могу получить ссылку FileField? Я попробовал url поле, но оно дает путь к файлу:

In [7]: myobject.myfilefield.path
Out[7]: u'/home/xxxx/media/files/reference/1342188147.zip'

In [8]: myobject.myfilefield.url
Out[8]: u'/home/xxxx/media/files/reference/1342188147.zip'

я ожидал получить http://<mydomain>/media/files/reference/1342188147.zip

как я могу получить это? Нужно ли создавать строку вручную?

редактировать

мой MEDIA_URL не был установлен, но я все еще не могу заставить его работать:

settings.py

MEDIA_ROOT = '/home/xxx/media/'
MEDIA_URL = 'http://xxx.com/media/'

models.py

class Archive(models.Model):

    #...
    file = models.FileField(upload_to="files")

in Шелл!--27-->

a = Archive()
a.file = "/some/path/to/file.txt"
a.save()

тогда я получаю за a.path:

"/some/path/to/file.txt"

и a.url:

"http://xxx.com/media/some/path/to/file.txt"

когда это сделано программно, a.file = "/some/path/to/file.txt" файл не загружен до MEDIA_ROOT. Как я могу загрузить файл в каталог, определенный upload_to, то есть в моем случае /home/xxx/media/file.txt?

2 ответов


вывод основан на вашем файле настроек, посмотрите здесь для понимания обслуживания staticfiles в разработке и / или производстве:

путаница в Django admin, статические и медиа-файлы


Я предполагаю, что у вас есть поле определено как:

picture = models.ImageField(upload_to="/home/xxx/media/files/reference")

другими словами, возможно ли, что вы определили абсолютный путь для свойства upload_path поля ?

попробуйте что-то вроде

from django.conf import settings
picture = models.ImageField(upload_to=settings.MEDIA_ROOT + "files/reference")