2016-02-04 1 views
1

Я пытаюсь сохранить изображения на носителе, используя имя галереи, указанное во время загрузки фотографий. Мой код выглядит следующим образом:Как в Django upload Фото на основе названия галереи из другого поля модели?

from __future__ import unicode_literals 

from django.db import models 
from django.conf import settings 


class Gallery(models.Model): 
    name = models.CharField(max_length=128) 
    upload_date = models.DateField() 

    class Meta: 
     verbose_name_plural = "galleries" 

class Photo(models.Model): 
    Name = models.CharField(max_length=128) 
    File = models.FileField() 
    PhotoGallery = models.ForeignKey(Gallery, on_delete=models.CASCADE) 

    def save(self, *args, **kwargs): 
     self.File.upload_to = "{media}/photohouse/{gallery}".format(media=settings.MEDIA_ROOT, 
                   gallery=self.PhotoGallery.name) 
     super(Photo, self).save(*args, **kwargs) 

Изображение по-прежнему загружается в корневую среду. Что я делаю неправильно?

ответ

2

upload_to необходимо указать и указать как часть поля модели.

def photo_upload_to(instance, filename): 
    return '{media}/photohouse/{gallery}/{filename}'.format(
     media=settings.MEDIA_ROOT, 
     gallery=instance.PhotoGallery.name, 
     filename=filename) 

class Photo(models.Model): 
    .... 
    File = models.FileField(upload_to=photo_upload_to)