Вот рабочий пример. Delivery Droid Database Class
.
Вы пытающийся сделать это в ModelForm?
Это - то, как я сделал для поля файла
class UploadSongForm(forms.ModelForm):
class Meta:
model = Mp3File
def save(self):
content_type = self.cleaned_data['file'].content_type
filename = gen_md5() + ".mp3"
self.cleaned_data['file'] = SimpleUploadedFile(filename, self.cleaned_data['file'].read(), content_type)
return super(UploadSongForm, self).save()
Можно взять его в качестве примера и взгляда в источнике, в чем класс InMemoryUploadedFile нуждается в параметрах инициализации.
Вы могли реализовать форму с полем загрузки файла при помощи экземпляров формы, вот представление:
def form_view(request):
if request.method == 'POST':
form = FooForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return render_to_response('result.html')
return render_to_response('form.html', {
'form': form;
'error_messages': form.errors;
}
form = FooForm()
return render_to_response('form.html', {
'form': form;
}
form.save () сохранил загруженный файл наряду со всеми другими полями, когда Вы включали запрос. Аргумент ФАЙЛОВ в он - конструктор. В Ваших моделях необходимо определить подкласс FooForm класса ModelForm как это:
class FooForm(ModleForm):
Meta:
model = Foo
... где Foo является подклассом Модели, которая описывает данные, Вы хотите сохранить постоянно.
Вам нужно сохранить InMemoryUploadedFile
в ImageField
, а не "превращать" его в ImageField
:
image = request.FILES['img']
foo.imagefield.save(image.name, image)
где foo - экземпляр модели, а imagefield - ImageField
.
В качестве альтернативы, если вы извлекаете изображение из формы:
image = form.cleaned_data.get('img')
foo.imagefield.save(image.name, image)