2017-10-19 154 views
0

我正在构建一个文件上传页面,其中文件将以其名称中的不同前缀保存(get_file_path函数使用instance.mname),但会通过相同的上载模型/表单。我想要在mname ='prefix'中的窗体视图中声明前缀。我怎样才能从视图中传递这个值来形成?将值传递给Django模型属性

谢谢!

models.py

class Upload(models.Model): 

    mname = # need it to be passed 
    document = models.FileField(upload_to=get_file_path, validators=[validate_file_extension]) 
    upload_date=models.DateTimeField(auto_now_add =True) 

forms.py

class UploadForm(forms.ModelForm): 
    class Meta: 
     model = Upload 
     fields = ('document',) 

views.py

def uploadFile(request): 
    if request.method == "POST": 

     file = UploadForm(request.POST, request.FILES, mname='....') 
     if file.is_valid(): 
      file.save() 

回答

0

您可以将参数添加到窗体的__init__

UploadForm(forms.Form): 

    def __init__(self, path, *args, **kwargs): 
     super(UploadForm, self).__init__(*args, **kwargs) 
     self.fields['document'] = forms.FileField(upload_to=path, validators=[validate_file_extension]) 

而与此参数初始化形式:

file = UploadForm(request.POST, request.FILES, path='...') 
+0

谢谢!似乎非常接近工作,但返回__init __()有一个意想不到的关键字参数'upload_to' –

+0

您是否尝试过没有验证器...这一个我刚刚从您的示例复制,但可能不属于这里。 – sinned

+0

我想这也许是因为你不能使用带有文件上传的模型 –