document.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import datetime
  2. from django import forms
  3. from django.core.exceptions import ValidationError
  4. class DocumentUploadForm(forms.Form):
  5. MAX_FILES = 5 # Максимальное количество файлов для загрузки
  6. doc_expire_date = forms.DateField(
  7. required=False,
  8. widget=forms.DateInput(attrs={
  9. 'class': 'form-control',
  10. 'type': 'date',
  11. }),
  12. label='Дата окончания действия документа (при наличии)'
  13. )
  14. doc_file = forms.FileField(
  15. widget=forms.ClearableFileInput(attrs={
  16. 'id': 'doc-file-input'
  17. }),
  18. required=True,
  19. )
  20. # Дата истечения срока документа не может быть в прошлом
  21. def clean_doc_expire_date(self):
  22. doc_expire_date = self.cleaned_data.get('doc_expire_date')
  23. if doc_expire_date and doc_expire_date < datetime.date.today():
  24. raise ValidationError("Дата окончания действия документа не может быть в прошлом.")
  25. return doc_expire_date
  26. # Загружаемые файлы должны иметь только допустимый тип и расширение
  27. def clean_doc_file(self):
  28. files = self.files.getlist('doc_file')
  29. allowed_mime_types = ['image/jpeg', 'image/png', 'application/pdf']
  30. allowed_extensions = ['jpg', 'jpeg', 'png', 'pdf']
  31. # Проверка на максимальное количество файлов
  32. if len(files) > self.MAX_FILES:
  33. raise ValidationError(f"Вы можете загрузить не более {self.MAX_FILES} файлов.")
  34. for file in files:
  35. # Проверяем расширение файла
  36. extension = file.name.split('.')[-1].lower()
  37. if extension not in allowed_extensions:
  38. raise ValidationError(f"Файл {file.name} имеет недопустимое расширение. Допустимые расширения: {', '.join(allowed_extensions)}.")
  39. # Проверяем MIME тип файла
  40. if file.content_type not in allowed_mime_types:
  41. raise ValidationError(f"Файл {file.name} имеет недопустимый формат. Допустимые форматы: {', '.join(allowed_mime_types)}.")
  42. return files