[解決済み] Django - ファイルを作成し、それをモデルの FileField に保存する方法は?
2022-05-29 20:16:36
質問
ここに私のモデルがあります。 モデルインスタンスが保存されるたびに、新しいファイルを生成し、既存のファイルを上書きしたいのです。
class Kitten(models.Model):
claw_size = ...
license_file = models.FileField(blank=True, upload_to='license')
def save(self, *args, **kwargs):
#Generate a new license file overwriting any previous version
#and update file path
self.license_file = ???
super(Request,self).save(*args, **kwargs)
ファイルをアップロードする方法について、たくさんのドキュメントを見ます。 しかし、ファイルを生成し、それをモデルフィールドに割り当て、Django がそれを適切な場所に保存するにはどうしたらよいでしょうか?
どのように解決するのですか?
あなたが見てみたいのは FileFieldとFieldFile を、そして特に フィールドファイル.save() .
基本的に、フィールドとして宣言されたものは
FileField
として宣言されたフィールドは、アクセスされると、クラス
FieldFile
のインスタンスを生成します。このインスタンスは、基礎となるファイルと対話するためのいくつかのメソッドを提供します。つまり、あなたがすべきことは
self.license_file.save(new_name, new_contents)
ここで
new_name
は割り当てたいファイル名で
new_contents
がそのファイルの内容です。なお
new_contents
のインスタンスでなければなりません。
django.core.files.File
または
django.core.files.base.ContentFile
(を使うことができます(詳しくはマニュアルのリンクを参照してください)。
2つの選択肢は、以下のように集約されます。
from django.core.files.base import ContentFile, File
# Using File
with open('/path/to/file') as f:
self.license_file.save(new_name, File(f))
# Using ContentFile
self.license_file.save(new_name, ContentFile('A string with the file content'))
関連
-
Pythonショートビデオクローラーチュートリアル
-
[解決済み】Djangoのクエリセットフィルタリングでnot equalを行うにはどうすればよいですか?
-
[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] Pythonでファイルやフォルダを削除する方法は?
-
[解決済み] ファイルへの追記はどのように行うのですか?
-
[解決済み] Matplotlibでプロットを表示するのではなく、画像ファイルに保存する。
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Djangoでnull=Trueとblank=Trueの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonによるjieba分割ライブラリ
-
Python LeNetネットワークの説明とpytorchでの実装
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み] Docker Compose - 複数のコンテナ間で名前付きボリュームを共有する