【问题标题】:Django - passing extra arguments into upload_to callable functionDjango - 将额外的参数传递给 upload_to 可调用函数
【发布时间】:2012-05-30 03:26:36
【问题描述】:

我知道您可以使用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 中?

【问题讨论】:

  • 你想做什么?

标签: django django-models


【解决方案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
    ...

【讨论】:

    猜你喜欢
    • 2014-11-08
    • 2016-09-22
    • 2017-04-09
    • 2019-02-04
    • 1970-01-01
    相关资源
    最近更新 更多