Python 访问方法变量

Python 访问方法变量,python,django,Python,Django,我想从我的create\u目录方法中访问gallery\u路径变量,作为我的gallery模型字段中的参数。这可能吗 class Category(models.Model): category_title = models.CharField(max_length=200) category_image = models.ImageField(upload_to="category") category_description = models.TextField()

我想从我的
create\u目录
方法中访问
gallery\u路径
变量,作为我的
gallery
模型字段中的参数。这可能吗

class Category(models.Model):
    category_title = models.CharField(max_length=200)
    category_image = models.ImageField(upload_to="category")
    category_description = models.TextField()
    slug = models.SlugField(max_length=200, unique=True, default=1)
    gallery = models.ImageField(upload_to=gallery_path)

    def create_directory(self):
        global gallery_path
        gallery_path = os.path.abspath(
            os.path.join(settings.MEDIA_ROOT, self.slug))
        if not os.path.isdir(gallery_path):
            os.mkdir(gallery_path)

    def save(self, *args, **kwargs):
        if not self.pk:
            self.create_directory()
        super().save(*args, **kwargs)

    def delete(self, *args, **kwargs):
        shutil.rmtree(os.path.join(settings.MEDIA_ROOT, self.slug))
        # os.rmdir(os.path.join(settings.MEDIA_ROOT, self.slug))
        super().delete(*args, **kwargs)

    class Meta:
        verbose_name_plural = "Categories"

    def __str__(self):
        return self.category_title

感谢您的帮助

以这种方式加载模型后,您不会影响图像上载路径。 模型是在应用程序启动时加载的,加载后您将尝试对其进行更改

但您可以将callable传递给参数“upload_to”,每次上传新文件时都会调用该参数:

class MyModel(models.Model):

    # Need to be defined before the field    
    def get_image_path(self, filename): 
        gallery_path = os.path.abspath(
        os.path.join(settings.MEDIA_ROOT, self.slug))
        if not os.path.isdir(gallery_path):
            os.mkdir(gallery_path)
        return os.path.join(gallery_path, filename)

    gallery = models.ImageField(upload_to=get_image_path)

文档:

那么您当前的代码有什么问题?啊,我抓到你了。以这种方式加载模型后,不能影响图像上载路径。模型是在应用程序启动时加载的,加载后您将尝试对其进行更改。