Django - 将额外的参数传递给upload_to可调用函数

时间:2012-05-30 03:26:37

标签: django django-models

我知道您可以使用upload_to参数传递可调用函数,以在Django模型中动态更改FileFied / ImageField等。

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?

1 个答案:

答案 0 :(得分:10)

instance变量是Badge()个实例。您可以像往常一样访问它的属性

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

您可以为instance 'self'命名,可能更容易理解:

def format_badge_name(self, filename):
    self.name
    self.file
    ...
相关问题