Django ImageField传递可调用以将_上载到

Django ImageField传递可调用以将_上载到,django,django-models,Django,Django Models,我正在尝试将自定义上载函数传递到我的模型imageField,但我想将该函数定义为模型函数……这可能吗 class MyModel(models.Model): ... image = models.ImageField(upload_to=self.get_image_path) ... def get_image_path(self, filename): ... return image_path 现在我知道我不能用“se

我正在尝试将自定义上载函数传递到我的模型imageField,但我想将该函数定义为模型函数……这可能吗

class MyModel(models.Model):
    ...
    image = models.ImageField(upload_to=self.get_image_path)
    ...

    def get_image_path(self, filename):
        ...
        return image_path
现在我知道我不能用“self”来引用它,因为self在那一点上不存在……有没有办法做到这一点?如果没有-定义该函数的最佳位置在哪里?

您可以使用decorator定义类内部的
上传到
(作为静态方法)。但它与典型的解决方案(在定义类之前定义get_image_路径)相比没有任何实际好处

所以只要删除“@classmethod”,Secator的代码就可以了

class MyModel(models.Model):

    # Need to be defined before the field    
    def get_image_path(self, filename): 
        # 'self' will work, because Django is explicitly passing it.
        return filename

    image = models.ImageField(upload_to=get_image_path)

是的,看看Paulo提到的链接,它清楚地显示在那里(没有
self.
,在models.py中将可调用函数定义为一个函数)看起来我的答案在这里毕竟:@Secator:我在自己的代码中尝试了这一点,但实际上它并没有调用方法——对于文件位置,我得到了“current:/o7pDX.jpg”@科琳,它也在把我的staticmethod转换成字符串。看起来该方法必须是模块(或某个模块)的直接属性。如果在
@classmethod
中仅将
get\u image\u path
定义为正常方法而不使用
@classmethod
,则第一个参数应该是类而不是对象。为了减少混淆,我认为您应该使用
cls
而不是
self
class MyModel(models.Model):

    # Need to be defined before the field    
    def get_image_path(self, filename): 
        # 'self' will work, because Django is explicitly passing it.
        return filename

    image = models.ImageField(upload_to=get_image_path)