我想在upload_to中调用模型类的自我函数:
class Foo(models.Model):
filestack = models.FileField(upload_to=self. gen_save_path)
def gen_save_path(self):
"""
gen_save_path: void -> String
Generates the path as a string for fileStack field.
"""
return "some generated string"
但是我收到NameError: name 'self' is not defined
错误
答案 0 :(得分:3)
filestack
是一个类属性,虽然根据django docs {{1有两个参数,实例(定义了FileField的模型实例)和filename(最初给文件的文件名),所以你可以将self
设置为这样的函数
upload_to
如果您希望在课程中加入upload_to
,可以使用lambda来调用def gen_save_path(instance, filename):
"""
gen_save_path: void -> String
Generates the path as a string for fileStack field.
"""
return "some generated string"
class Foo(models.Model):
filestack = models.FileField(upload_to=gen_save_path)
,例如
gen_save_path
答案 1 :(得分:-1)
我认为如果您使用lambda函数,这将有效:
class Foo(models.Model):
filestack = models.FileField(upload_to=lambda: self.gen_save_path())
def gen_save_path(self):
"""
gen_save_path: void -> String
Generates the path as a string for fileStack field.
"""
return "some generated string"
答案 2 :(得分:-1)
在您的代码中,filestack是一个类范围的范围变量,因为没有在方法中定义。 所以在这个范围内没有可用的自我。
我认为你可以使用:
filestack =models.FileField(upload_to=Foo.gen_save_path)
或
在__init__
构造函数中定义filestack值,您可以在其中使用self !!