Python 如何在django admin中将图像保存到自定义文件路径?

Python 如何在django admin中将图像保存到自定义文件路径?,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:

我正在尝试将图像上载到我选择的特定文件夹。型号代码如下:

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)
这里每个标签都有自己的文件夹。我想实现的功能是,当我上传图像时,我可以选择一个特定的标签(通过选择“标签”),然后这个图像可以上传到那个文件夹。我尝试使用:
信号
更改
文件路径
,但失败。我写的代码是:

def upload_photo(sender, instance, **kwargs):
    tardir = instance.Tag.Tag_name
    instance.filepath = 'Gallery'+'/'+tardir
    

您可以通过使用函数将upload_发送到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']

因为“照片”中的“标签”将在路径中使用,我认为您的代码不起作用。无论如何,谢谢。你可以从实例中获取标记。标记,实例正在发送到函数。嗯,我误解了你的代码。它终于起作用了,非常感谢!