【发布时间】:2017-04-24 09:00:42
【问题描述】:
我第一次尝试生产部署一个 Django 项目。我的前 Django 实现包含相当多的数据(数千张图像,数据库中的数千个条目)。我编写了一个自定义的manage.py populate_db 命令,它解析旧数据库的转储并根据我的模型创建新的 Django 数据库。但是我坚持添加所有文件。
我最初的部署计划是在本地创建一次数据库,通过 sFTP 将所有图像上传到服务器上的媒体文件夹,对数据库执行相同的操作,仅此而已。为此,我需要数据库来引用媒体文件夹中的图像文件。据我了解,Django 只是通过文件名来完成的。到目前为止,我已经能够做到这一点:
def _add_image_files(self, user: str):
i = 0
for f in local_files:
i += 1
photo = Photo(album=1, number=i, back=False, added_by=user)
from django.core.files import File
photo.image.save(f.name, File(open(f.path, 'rb')))
照片定义为
class Photo(models.Model):
album = models.IntegerField(null=True)
number = models.IntegerField(null=True)
image = models.ImageField(null=True, upload_to='photo_image_files')
然而 Django 显然通过读取和写入媒体文件夹来复制每个文件。我不需要这个重复,我只想将每个文件的引用添加到数据库中。
我怎样才能实现它?或者,如果由于某种原因这是一种糟糕的方法,请告诉我更好的方法。谢谢。
【问题讨论】: