デフォルトの 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)
これにより、情報は確実に正しく保存されます。