Django:在Django模型中调用自我函数

时间:2010-06-22 09:01:49

标签: python django django-models

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

3 个答案:

答案 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 !!