Django ImageField传递可调用以将_上载到
我正在尝试将自定义上载函数传递到我的模型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
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)