2017-04-20 52 views
1

我有一個網站,可以讓用戶上傳文件。這些文件被附加到一個節點,該節點是上傳請求的一部分。由於同一個文件可能會附加到不同的節點上,因此Django會通過向文件名添加散列來重命名該文件。因此,如果用戶下載之前上傳的文件,它將不具有原始文件名。根據請求在子文件夾中保存上傳的文件

是否可以在上傳文件的媒體文件夾內創建子目錄(以節點ID命名)?我找到的最接近的解決方案是更改FileField的系統存儲,但對於該模型的所有文件,這是靜態的。還是有另一種更好的方法來解決重複文件的問題?

型號:

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

你可以做這樣的事情,其中​​包括node ID(在upload_to路徑在模型中定義爲整數:

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) 
相關問題