document.py 2.0 KB

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