私はユーザーがファイルをアップロードできるウェブサイトを持っています。これらのファイルは、アップロード要求の一部であるノードに接続されています。同じファイルが異なるノードにアタッチされる可能性があるため、Djangoはファイル名にハッシュを追加してファイルの名前を変更します。したがって、ユーザーが以前にアップロードしたファイルをダウンロードした場合、元のファイル名は失われます。アップロードされたファイルをリクエストに応じてサブフォルダに保存します。
ファイルがアップロードされたメディアフォルダ内にサブディレクトリ(ノードIDの名前に由来する)を作成できますか?私が見つけた最も近い解決策は、FileFieldのSystem Storageを変更することでしたが、これはその1つのモデルのすべてのファイルに対して静的です。または、重複したファイルの問題を解決する別の方法がありますか?
モデル:
class Attachment(models.Model):
node = models.IntegerField(default=-1)
file = models.FileField(upload_to=".")
ビュー:
def file_upload(request):
if request.method == "POST":
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
instance = Attachment(file=request.FILES["file"], node_id=request.POST["node_id"])
instance.save()
return HttpResponse(instance.file.url)