#python #django
#python #django
Вопрос:
Я пытаюсь загрузить изображения в определенные папки, которые я выбираю. код модели выглядит следующим образом:
class PhotosTags(models.Model):
Tag_name = models.CharField('Tag Name', max_length=100, default='NA', unique=True)
Description = models.TextField('Tag Description', max_length=200, blank=True)
class Meta:
verbose_name = 'Tags'
verbose_name_plural = verbose_name
ordering = ['Date_created']
def __str__(self):
return str(self.Tag_name)
class Photos(models.Model):
Name = models.TextField('Photo Name', max_length=200, blank=True)
Tag = models.ForeignKey(PhotosTags, on_delete=models.CASCADE, default=None)
filepath = 'Gallery'
Photo = models.ImageField(upload_to=filepath, blank=False)
class Meta:
verbose_name = 'Photos'
verbose_name_plural = verbose_name
ordering = ['Date_uploaded']
pre_save.connect(upload_photo, sender=Photos)
Здесь у каждого тега есть своя папка. Функция, которую я хочу реализовать, заключается в том, что когда я загружаю изображение, я могу выбрать определенный тег (через выбор «Tag»), а затем это изображение может быть загружено в эту папку. Я попытался использовать: signals
для изменения filepath
, но не удалось. Код, который я написал, является:
def upload_photo(sender, instance, **kwargs):
tardir = instance.Tag.Tag_name
instance.filepath = 'Gallery' '/' tardir
Ответ №1:
Вы можете достичь этого, отправив upload_to path с помощью функции.
import os
def path_generator(instance, filename):
base, extension = os.path.splitext(os.path.basename(filename))
file_dir = f"your_desired_path.{extension}"
return file_dir
class Photos(models.Model):
Name = models.TextField('Photo Name', max_length=200, blank=True)
Tag = models.ForeignKey(PhotosTags, on_delete=models.CASCADE, default=None)
Photo = models.ImageField(upload_to=path_generator, blank=False)
class Meta:
verbose_name = 'Photos'
verbose_name_plural = verbose_name
ordering = ['Date_uploaded']
Комментарии:
1. Поскольку «Тег» в «Фотографиях» будет использоваться в пути, я не думаю, что ваш код работает. В любом случае спасибо.
2. Вы можете получить тег из экземпляра. Тег, экземпляр отправляется в функцию.
3. хммм, я неправильно понял ваш код. Наконец-то это работает, большое спасибо!