2017-04-20 12 views
1

私はユーザーがファイルをアップロードできるウェブサイトを持っています。これらのファイルは、アップロード要求の一部であるノードに接続されています。同じファイルが異なるノードにアタッチされる可能性があるため、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) 

答えて

1

はい、documentation on upload_toを見てみましょう。

あなたはupload_toパスに、モデル内の整数として定義されnode ID(含まれ、このような何か、何ができる:

def attachment_path_with_node(instance, filename): 
    return "attachments/{}/{}".format(instance.node, filename) 

class Attachment(models.Model): 
    node = models.IntegerField(default=-1) 
    file = models.FileField(upload_to=attachment_path_with_node) 
関連する問題