2012-05-30 3 views
3

Я знаю, что вы можете использовать параметр upload_to для передачи вызываемой функции для динамического изменения FileFied/ImageField и т. Д. В модели Django.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) 

Возможно ли передать значения из имени (self.name?) В format_badge_name?

+0

Что вы пытаетесь сделать? –

ответ

8

Переменная instance - это пример Badge(). Вы можете получить доступ к его свойства, как обычно

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

Вы могли бы назвать instance'self', и это может быть легче понять:

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