Django - передача дополнительных аргументов в вызываемую функцию upload_to
Я знаю, что вы можете использовать параметр upload_to для передачи вызываемой функции для динамического изменения FileFied / ImageField и т. Д. В модели Django.
В функцию, вызываемую 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?
1 ответ
Решение
instance
переменная Badge()
пример. Вы можете получить доступ к его свойствам, как обычно,
def format_badge_name(instance, filename):
instance.name
instance.file
...
Вы могли бы назвать instance
'self'
и это может быть легче понять:
def format_badge_name(self, filename):
self.name
self.file
...