1919 UserTaskAnswerFile ,
2020 UserTaskAnswerOption ,
2121)
22- from .models .content import looks_like_image_file
22+ from .models .file_validation import looks_like_image_file
2323
2424# Admin-only captions for sections in app index
2525CourseModule ._meta .verbose_name = "Модуль"
@@ -77,6 +77,15 @@ def _courses_get_app_list(self, request, app_label=None):
7777 admin .site ._courses_order_patched = True
7878
7979
80+ def _validate_image_upload (form : forms .ModelForm , field_name : str , error_message : str ) -> None :
81+ uploaded_file = form .cleaned_data .get (field_name )
82+ if uploaded_file and not looks_like_image_file (
83+ mime_type = getattr (uploaded_file , "content_type" , "" ),
84+ extension = getattr (uploaded_file , "name" , "" ).rsplit ("." , 1 )[- 1 ],
85+ ):
86+ form .add_error (field_name , error_message )
87+
88+
8089class OrderUniqueInlineFormSet (BaseInlineFormSet ):
8190 duplicate_field_error = "Такой порядковый номер уже используется в этом разделе."
8291 duplicate_form_error = "Найдены дублирующиеся значения. Исправьте строки ниже."
@@ -134,6 +143,25 @@ class Meta:
134143 model = Course
135144 fields = "__all__"
136145
146+ def clean (self ):
147+ cleaned_data = super ().clean ()
148+ _validate_image_upload (
149+ self ,
150+ "avatar_upload" ,
151+ "В поле аватара можно загрузить только файл изображения." ,
152+ )
153+ _validate_image_upload (
154+ self ,
155+ "card_cover_upload" ,
156+ "В поле обложки карточки можно загрузить только файл изображения." ,
157+ )
158+ _validate_image_upload (
159+ self ,
160+ "header_cover_upload" ,
161+ "В поле обложки шапки можно загрузить только файл изображения." ,
162+ )
163+ return cleaned_data
164+
137165
138166class CourseTaskAdminForm (forms .ModelForm ):
139167 image_upload = forms .FileField (
@@ -153,14 +181,11 @@ def clean(self):
153181 cleaned_data = super ().clean ()
154182 image_upload = cleaned_data .get ("image_upload" )
155183 attachment_upload = cleaned_data .get ("attachment_upload" )
156- if image_upload and not looks_like_image_file (
157- mime_type = getattr (image_upload , "content_type" , "" ),
158- extension = getattr (image_upload , "name" , "" ).rsplit ("." , 1 )[- 1 ],
159- ):
160- self .add_error (
161- "image_upload" ,
162- "В поле изображения можно загрузить только файл изображения." ,
163- )
184+ _validate_image_upload (
185+ self ,
186+ "image_upload" ,
187+ "В поле изображения можно загрузить только файл изображения." ,
188+ )
164189
165190 # Preserve the fact that a file was provided so model validation
166191 # doesn't add a second "required image" error for the same field.
@@ -179,6 +204,15 @@ class Meta:
179204 model = CourseModule
180205 fields = "__all__"
181206
207+ def clean (self ):
208+ cleaned_data = super ().clean ()
209+ _validate_image_upload (
210+ self ,
211+ "avatar_upload" ,
212+ "В поле аватара можно загрузить только файл изображения." ,
213+ )
214+ return cleaned_data
215+
182216
183217class CourseModuleInline (admin .TabularInline ):
184218 model = CourseModule
0 commit comments