万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

DjangoでModelのFileFieldのでのupload_toの件

class Hoge(models.Model):
    bar_file = models.FileField(u"barファイル",
                                upload_to='{0}/{1}/{2}'.format(
                                    UPLOAD_BASE_PATH,
                                    'bar_files',
                                    id),
                                help_text=u'barファイルを選択して下さい')

のように、 アップロードするファイル名にidを使いたかったのでこのように書いてしまうと、 ModelのidはFieldなので困った。

    uuid = UUIDField(auto=True)

を使ったとしても一緒。 あくまでも、Modelクラスの変数はFieldだ。

Django FileField with upload_to determined at runtime - Stack Overflow

ここを見ると、

file = models.FileField(
    upload_to=lambda instance, filename: '/'.join(['mymodel', str(instance.pk), filename]),
)

のような具合にしたら、 インスタンスが取れそうだ