Django图像上传数据库绝对路径而非相对路径

时间:2017-05-25 22:16:03

标签: python json django image django-rest-framework

我的模特:

class MedicineType(models.Model):
    name = models.CharField(max_length=100)
    image = models.ImageField(upload_to='images/', max_length=255, null=True)
settings.py

中的

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

现在,当我从浏览器上传图像时,图像的url作为绝对路径存储在数据库中。例如,名为' example.png'将会有

http://localhost:8000/media/images/example.png

但我希望只有相对路径才会存储在数据库中。不与localhost和端口。我该怎么做?

1 个答案:

答案 0 :(得分:1)

你是怎么做的?

是什么让你认为Django将http://localhost:8000/media/images/example.png存储在您的数据库中?如果这就是django的作用,那么通过更改python manage runserver 8010的端口意味着所有上传的内容都会中断?

不,这不是Django所做的。见this from the documentation

>>> car = Car.objects.get(name="57 Chevy")
>>> car.photo
<ImageFieldFile: chevy.jpg>
>>> car.photo.name
'cars/chevy.jpg'
>>> car.photo.path
'/media/cars/chevy.jpg'
>>> car.photo.url
'http://media.example.com/cars/chevy.jpg'

上面应该解释发生了什么。请查看上面的链接了解更多详情。

car.photo.name IS Django在数据库中存储的内容。 car.photo.urlcare.photo.path就是您认为存储在数据库中的内容。