5

upload_to パラメータを使用して呼び出し可能な関数を渡して、Django モデルの FileFied/ImageField などを動的に変更できることを私は知っています。

upload_to によって呼び出される関数には、データベースに保存されていないファイルのインスタンス (instance) とそのインスタンスのファイル名 (filename) の 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 に値を渡すことは可能ですか?

4

1 に答える 1

12

instance変数はインスタンスBadge()です。通常どおりプロパティにアクセスできます

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

に名前を付けるとinstance 'self'、理解しやすいかもしれません。

def format_badge_name(self, filename):
    self.name
    self.file
    ...
于 2012-05-30T05:01:24.730 に答える