2012-05-30 109 views
3

我知道您可以使用upload_to參數傳遞可調用函數來動態更改Django模型中的FileFied/ImageField等。Django - 將額外參數傳遞給upload_to callable函數

upload_to調用的函數傳遞2個變量,即非保存在數據庫中的文件(實例)的實例和所述實例(文件名)的文件名。

如果我在模型中使用ImageField以及其他(Char等)字段,是否可以將這些字段中的值轉換爲相同的可調用函數。例如

class Badge(models.Model): 

    def format_badge_name(instance, filename): 
    _filetype = os.path.splitext(filename)[1] 
    _category = 'foo' 
    _name = os.path.splitext(filename)[0] 
    _filename = "%s-%s-%s%s" % (_category, _name, 'private', _filetype) 

    return "badges/%s" % _filename 

    name = models.CharField(max_length=16, help_text="Name for Badge") 
    file = models.ImageField(upload_to=format_badge_name) 

是否可以將name(self.name?)中的值傳遞給format_badge_name?

+0

什麼是你試圖做什麼? –

回答

8

該變量是Badge()實例。你可以訪問它的屬性和往常一樣

def format_badge_name(instance, filename): 
    instance.name 
    instance.file 
    ... 

你能說出instance'self',它可能更容易理解:

def format_badge_name(self, filename): 
    self.name 
    self.file 
    ...