/ /生成されたファイルをDjangoモデルに関連付ける方法-django、file

生成されたファイルをDjangoモデルに関連付ける方法 - django、file

ファイルを作成して、に関連付けたい FileField 私のモデルの。これが私の単純化された試みです:

#instantiate my form with the POST data
form = CSSForm(request.POST)
#generate a css object from a ModelForm
css = form.save(commit=False)
#generate some css:
css_string = "body {color: #a9f;}"
#create a css file:
filename = "myfile.css"
#try to write the file and associate it with the model
with open(filename, "wb") as f:
df = File(f) #create django File object
df.write(css_string)
css.css_file = df
css.save()

への呼び出し save() スロー "seek of closed file" 例外。動かせば save() 〜に with ブロック、サポートされていない操作を生成します "read"。現在、ファイルは私のメディアディレクトリに作成されていますが、空です。レンダリングするだけなら css_string とともに HttpResponse 次に、期待されるcssが表示されます。

ドキュメント 生成されたファイルとデータベースフィールドをリンクする方法の例がないようです。これを行うにはどうすればよいですか?

回答:

回答№1は1

ジャンゴ FileField どちらかになります django.core.files.File、ファイルインスタンスまたは django.core.files.base.ContentFile、これはパラメータとして文字列を取り、 ContentFile。すでにファイルの内容を文字列として持っているので、 ContentFile 行く方法です(私はそれをテストできませんでしたが、うまくいくはずです):

from django.core.files.base import ContentFile

# create an in memory instance
css = form.save(commit=False)
# file content as string
css_string = "body {color: #a9f;}"
# create ContentFile instance
css_file = ContentFile(css_string)
# assign the file to the FileField
css.css_file.save("myfile.css", css_file)
css.save()

djangoのドキュメントをチェック FileFieldの詳細.