Если вы обрабатываете загрузку файла и заинтересованы только в изображениях,
Джанго установит для вас content_type
(точнее для себя?):
from django.forms import ModelForm
from django.core.files import File
from django.db import models
class MyPhoto(models.Model):
photo = models.ImageField(upload_to=photo_upload_to, max_length=1000)
class MyForm(ModelForm):
class Meta:
model = MyPhoto
fields = ['photo']
photo = MyPhoto.objects.first()
photo = File(open('1.jpeg', 'rb'))
form = MyForm(files={'photo': photo})
if form.is_valid():
print(form.instance.photo.file.content_type)
Это не зависит от типа контента, предоставленного пользователем. Но
django.db.models.fields.files.FieldFile.file
является недокументированным
свойство .
На самом деле, изначально content_type
устанавливается из запроса , но когда
форма проверяется, значение обновлено .
Что касается non-images, делает request.FILES['name'].read()
мне кажется вполне приемлемым.
Во-первых, это то, что делает Django . Во-вторых, файлы размером более 2,5 Мб по умолчанию
хранятся на диске . Итак, позвольте мне указать вам на другой ответ
здесь.
Для любопытных, вот трассировка стека, которая приводит к обновлению
content_type
django.forms.forms.BaseForm.is_valid: self.errors
django.forms.forms.BaseForm.errors: self.full_clean ()
django.forms.forms.BaseForm.full_clean: self._clean_fields ()
django.forms.forms.BaseForm._clean_fiels: field.clean ()
django.forms.fields.FileField.clean: super (). clean ()
django.forms.fields.Field.clean: self.to_python ()
django.forms.fields.ImageField. to_python