2017-12-09 3 views
1

Ich habe zwei Modelle [1] TempFile(models.Model) und Company(models.Model), wenn die Ansicht [2] save_records(request) heißt Ich mag würde & bewegen das Bild von TempFile(models.Model) zu speichern, die /temporary_files/zuCompany(models.Model) in Ordnern, die /company_logo/ in Ordnern .Wie verschiebe ich eine Datei von einem Modell in einen anderen?

[1] models.py

class Company(models.Model): 
    logo = models.FileField(upload_to="company_logo") 
    ... 

class TempFile(models.Model): 
    unique_id = models.CharField(max_length=8) 
    image = models.FileField(upload_to="temporary_files") 
    ... 

[2] views.py

def save_records(request): 
    if request.method == 'POST': 
     temp_file = TempFile.objects.get(unique_id=request.session['uuid']) 

     Company.objects.create(
      logo = temp_file.image 
      ... 
     ) 

Hier ist das Problem mit dieser Methode, während die logo den Pfad der gespeichert wird Ordner bleibt /temporary_files/. Ich würde gerne wissen, wie Sie das Bild ohne Qualitätsverlust und Performance-Problem zu Company(models.Model) 's company_logo Ordner speichern oder verschieben können?

Antwort

0

Wenn Sie Dateisystemspeicher verwenden, dann die effizienteste Möglichkeit ist, die Datei auf der Festplatte zu bewegen (siehe this part of the documentation):

import os 
from django.conf import settings 

temp_file = TempFile.objects.get(unique_id=request.session['uuid']) 

# Move the file 
old_path = temp_file.image.path 
filename = os.path.basename(old_path) 
new_path = os.path.join(settings.MEDIA_ROOT, 'company_logo', filename) 
os.rename(old_path, new_path) 
temp_file.save() 

Company.objects.create(
    logo = temp_file.image 
) 

Beachten Sie, dass der Weg der temp_file.image auch geändert hat - vermutlich werden Sie Löschen dieses Objekts, nachdem Sie das Objekt Company gespeichert haben.

Verwandte Themen