Django:在Django mod中调用self函数

2024-06-16 14:21:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: topathselfstringmodelfoomodelssave
3条回答

filestack是一个类属性,在声明它时,您不能使用self,因为还没有创建类的对象(self),根据djangodocsupload_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,例如

^{pr2}$

在代码中,filestack是类范围内的变量,因为它没有在方法中定义。 所以在这个范围内没有可用的self。在

我想你可以用:

filestack =models.FileField(upload_to=Foo.gen_save_path)

或者

__init__构造函数中定义filestack值,您可以在其中使用self!!在

我想如果你使用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"

相关问题 更多 >