現在のモデルIDを使用したDjango管理ファイルのアップロード 質問する

現在のモデルIDを使用したDjango管理ファイルのアップロード 質問する

デフォルトの Django 管理者を使用して、シンプルなフォト ギャラリーを作成しようとしています。ギャラリーごとにサンプル写真を保存したいのですが、ファイル名を保持したくありません。ファイル名の代わりに、モデルの ID ( N.jpg) を保存したいと思います。しかし、オブジェクトを初めて保存するときには、ID が存在しません。モデルの次の自動増分を知るにはどうすればよいですか。または、アップロード前にモデル データを保存しsuper.save、アップロード後にファイルself.idが存在する場合は、どうにかしてモデル データを保存するにはどうすればよいですか。優れた解決策はありますか。

このようなもの:

def upload_path_handler(instance, filename):
    ext = filename extension
    return "site_media/images/gallery/{id}.{ext}".format(id=instance.nextincrement, ext=ext)

class Gallery(models.Model):
    name  = models.TextField()
    image = models.FileField(upload_to=upload_path_handler)

ファイル名を別のフィールドに保存することもできます。

ベストアンサー1

save()私も同じ問題に遭遇しました。Okm の回答は私を正しい道へと導いてくれましたが、モデルのメソッドをオーバーライドするだけで同じ機能を実現できるようです。

def save(self, *args, **kwargs):
    if self.pk is None:
        saved_image = self.image
        self.image = None
        super(Material, self).save(*args, **kwargs)
        self.image = saved_image

    super(Material, self).save(*args, **kwargs)

これにより、情報は確実に正しく保存されます。

おすすめ記事