ファイルを作成して、に関連付けたい 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の詳細.