Skip to main content
 首页 » 编程设计

python之Django:在 Django 模型中调用自函数

2025年05月04日8zhengyun_ustc

我想在 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 错误

请您参考如下方法:

filestack 是一个类属性,在声明它时您不能使用 self,因为还没有创建类 (self) 的对象,无论如何根据 django docs upload_to 有两个参数,instance(定义了 FileField 的模型实例)和 filename(最初给文件的文件名),所以你可以设置 upload_to这样的功能

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,您可以使用 lambda 调用 self.gen_save_path 例如

class Foo(models.Model): 
 
    filestack = models.FileField(upload_to=lambda self, fname:self.gen_save_path(fname)) 
 
    def gen_save_path(self, filename): 
        return "some generated string"