2016-12-09 66 views
1

我正在嘗試第一次生產 - 部署Django項目。我的pre-Django實現包含了很多數據(數千個圖像,數據庫中的數千個條目)。我寫了一個自定義manage.py populate_db命令,用於分析舊數據庫的轉儲,並根據我的模型創建新的Django數據庫。但是我堅持添加所有文件。手動添加文件到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的顯然是通過閱讀和它寫入介質文件夾中複製所有文件。我不需要這種重複,我只想將每個文件的引用添加到數據庫中。

我該如何實現它?或者,如果這是由於某種原因導致的,請讓我知道更好的方法。謝謝。

回答

0

我在這裏實際找到了答案:https://stackoverflow.com/a/12917845/674976「訣竅」是ImageField可以簡單地填入圖像文件名。結合bulk_create,我現在可以得到合理的執行時間。

photo_list = [] 
for i in range(1000): 
    photo = Photo(album=1, number=i, back=False) 
    photo.image = 'photo_image_files/:filename_i.jpg' 
    photo_list.append(photo) 
Photo.objects.bulk_create(photo_list) 

我無法找到此招(直接的ImageField指定文件名)的任何引用,因此,如果您可以通過編輯或添加註釋之一,這將是一個很好的改善這個答案。

相關問題