Django:在 Django 模型中调用 self 函数

Hel*_*nar 3 python django django-models

我想在 upload_to 中调用模型类的 self 函数:

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"
Run Code Online (Sandbox Code Playgroud)

但是我收到NameError: name 'self' is not defined错误

Anu*_*yal 5

filestack是一个类属性,在声明它时,您不能使用 self,因为尚未self创建类 ( ) 的对象,无论如何,根据 django文档 upload_to,它需要两个参数,实例(定义 FileField 的模型的实例)和文件名(最初赋予文件的文件名),因此您可以设置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)
Run Code Online (Sandbox Code Playgroud)

如果你想包含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"
Run Code Online (Sandbox Code Playgroud)