2013-04-18 36 views
0

- models.py -Django的内容类型和文件大小限制

class resmodel(models.Model): 
    fname = models.CharField(max_length=20) 
    lname = models.CharField(max_length=20) 
    file_header = models.CharField(max_length=20) 
    upload_file = ContentTypeRestrictedFileField(
        upload_to='documents', ] 
        content_types=['documents/msword', 'documents/pdf', 'documents/vnd.oasis.opendocument.text'], 
        max_upload_size=5242880,blank=True, null=True) 
    imag = models.ImageField(upload_to='images') 

- views.py -

def resview(request): 
    if request.method == "POST": 
     fname = request.POST.get('fname') 
     lname = request.POST.get('lname') 
     file_header = request.POST.get('file_header') 
     upload_resume = request.FILES['upload_resume'] 
     imag = request.FILES['im'] 

     if upload_file and imag: 
      details = resmodel(file_header=file_header, fname=fname, lname=lname, upload_file=upload_file, imag=imag) 
      details.save() 

     return HttpResponseRedirect('/profile/save/success/') 
    else: 
     return render_to_response('file.html') 

- file.html - -

<form action="." method="post" enctype="multipart/form-data">{% csrf_token %} 
<table border="0" align="center" cellsapcing="1" cellspadding="1"> 

    <tr> 
     <td colspan="2"><h3> Personal Information</h3></td> 

     <td>First Name</td> 
     <td><input type="text" name="fname" /></td> 
     <td>Last Name</td> 
     <td><input type="text" name="lname" /></td> 
     <td>Resume Header<sub>(250 words max)</sub></td> 
     <td><input type="text" name="file_header"></td> 
     <td>Upload Resume<sub>(.doc/.docx, rtf, pdf, txt)</sub></td> 
     <td><input type="file" name="upload_resume" ></td> 
     <td>Upload image</td> 
     <td><input type="file" name="im" ></td> 

     <td> 
      <input type="submit" value="SUBMIT">&nbsp;&nbsp; 
      <input type="reset" value="RESET"> 
     </td> 
    </tr> 
</table> 
</form> 

F或“ContentTypeRestrictedFileField”我跟着this link

但是,在这里我能够上传所有文件和文件夹在imag和upload_file字段。 如何限制?任何人都可以帮我解决这个问题吗? 谢谢。

回答

1

您必须使用表单验证。

from django.forms import models as model_forms 

def resview(request): 
    if request.method == "POST": 
     form_class = model_forms.modelform_factory(resmodel) 
     form = form_class(request.POST) 
     if form.is_valid(): 
      details = form.save() 
     return HttpResponseRedirect('/profile/save/success/') 
    else: 
     return render_to_response('file.html') 

但要注意这是基本的表格用法。

将来您应该将表单传递给模板上下文并使用表单数据填充模板以显示表单输入,标签和验证错误。

更多的文档这里Creating forms from models 和这里Working with forms

+0

WHAT存在限制内容TYPE与所述一个ü给上述(验证表单)。请理解我的问题。 – USER 2013-04-18 09:44:13

+0

使用表单的关键在于它负责验证和数据转换。表单将为ContentTypeRestrictedFileField字段限制具有错误内容类型的文件。 – 2013-04-18 10:26:20