Django:在Django模型中调用自己的功能 [英] Django: Call self function inside a Django model

查看:168
本文介绍了Django:在Django模型中调用自己的功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在upload_to中调用模型类的自我功能:

I want to call for a self function of a model class as such in 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'未定义错误

推荐答案

filestack 是一个类属性,同时声明它不能使用self,因为没有类的对象( self )尚未创建,反正根据django docs upload_to 采用两个参数,instance(模型的一个实例, FileField被定义)和filename(最初给文件的文件名),所以你可以设置 upload_to 到这样的功能

filestack is a class attribute and while declaring it you can not use self as there is no object of class (self) yet created, anyway according to django docs upload_to takes two arguments, instance (An instance of the model where the FileField is defined) and filename (The filename that was originally given to the file), so you can set upload_to to such function

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 例如

If you wish to include gen_save_path inside the class, you can use a lambda to call self.gen_save_path e.g.

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"

这篇关于Django:在Django模型中调用自己的功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆