2013-04-18 6 views
0

- models.py -Джанго тип содержимого файла и ограничение размера

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» i follow 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

ЧТО ТАМ В ОГРАНИЧЕНИЕ СОДЕРЖАНИЯ ТИПА С ОДНОГО U ДАЛ ВЫШЕ (ОБОСНОВАНИЕ FORM). ПОЖАЛУЙСТА, ПОНИМАЙТЕ МОЙ ВОПРОС. – USER

+0

Точка использования формы заключается в том, что она выполняет валидацию и преобразование данных. Форма ограничивает файлы с неправильными типами содержимого для полей ContentTypeRestrictedFileField. –

Смежные вопросы