2016-01-21 63 views
1

我試圖在我的Django應用程序中支持用戶上傳。應用程序應允許用戶創建自己的文件和文件夾回購。Django模型實例 - 保存其他屬性

下面是我的模型實例

class Project(models.Model): 
    name = models.CharField(max_length=255) 

    def __str__(self): 
     return self.name 

class Folders(models.Model): 
    name = models.CharField(max_length = 255,default = 'Main') 
    project = models.ForeignKey(Case) 

class Files(models.Model): 
    folder = models.ForeignKey(Folders) 
    file = models.FileField(upload_to = get_upload_url) 


def get_upload_url(instance,filename): 
    print('Instance is :',instance) 
    return '/'.join([instance.folder.project.name,instance.folder.name,filename]) 

我得到當我試圖上傳文檔到使用Django專用文件夾中的錯誤形成

def ProjectPageAlt(request,casenum,folder): 
    proj = Project.objects.get(pk=casenum) 
    folder = Folders.objects.get(name = folder,project=proj) 
    files = Files.objects.filter(folder=folder) or None 

    if request.method == 'POST': 
     form = FileUploadForm(request.POST,request.FILES) 

     if form.is_valid(): 
      instance = form 
      instance[folder] = folder 
      # form.folder = folder 
      instance.save() 
      return HttpResponse('thanks') 
    else: 
     form = FileUploadForm() 
    return render(request,'projectuploadalternative.html',{'form':form,'files':files}) 

,我發現了以下錯誤,因爲我試圖在保存之前將文件夾實例添加到模型

'FileUploadForm' object does not support item assignment 

無論如何圍繞這個?我需要確保文件上傳到相應的文件夾

回答

0

找到了解決辦法。但是這聽起來更像是對我的破解。

def CasePageAlt(request,casenum,folder): 
    case = Case.objects.get(pk=casenum) 
    folder = Folders.objects.get(name = folder,case=case) 
    files = Files.objects.filter(folder=folder) or None 

    if request.method == 'POST': 
     form = FileUploadForm(request.POST,request.FILES) 

     if form.is_valid(): 
      file = request.FILES['upload'] 
      instance = Files(folder=folder,file=file) 
      instance.save() 
      return HttpResponse('thanks') 
    else: 
     form = FileUploadForm() 
    return render(request,'caseuploadalternative.html',{'form':form,'files':files}) 

這是可行的,因爲我的初始表單是ModelForm。現在我所做的形式一個正常

上一頁

# class FileUploadForm(forms.ModelForm): 
# 
#  class Meta: 
#   model = Files 
#   fields = ['file'] 

class FileUploadForm(forms.Form): 

    upload = forms.FileField() 
相關問題