Django: función auto llamada dentro de un modelo Django

Quiero solicitar una función automática de una clase modelo como tal en 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" 

Sin embargo, estoy obteniendo NameError: name 'self' is not defined error

filestack es un atributo de clase y mientras lo declara, no puede usar self porque no hay ningún objeto de class ( self ) creado, de todos modos, de acuerdo con django docs upload_to toma dos argumentos, instancia (una instancia del modelo donde se define FileField) y el nombre de archivo (el nombre de archivo que se le dio originalmente al archivo), por lo que puede configurar upload_to para dicha función

 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) 

Si desea incluir gen_save_path dentro de la clase, puede usar un lambda para llamar self.gen_save_path por ejemplo

 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" 

Creo que esto funcionará si usas una función 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" 

en su código, el filestack es una variable de scope de clase ya que no está definida en un método. así que no hay un yo disponible en este ámbito.

Creo que puedes usar:

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

o

define el valor de la stack de archivos dentro de un constructor __init__ , donde puedes usar self!