26👍
You need to save the InMemoryUploadedFile
to the ImageField
rather than ‘turning’ it into an ImageField
:
image = request.FILES['img']
foo.imagefield.save(image.name, image)
where foo is the model instance, and imagefield is the ImageField
.
Alternatively, if you are pulling the image out of a form:
image = form.cleaned_data.get('img')
foo.imagefield.save(image.name, image)
3👍
You trying to do it in ModelForm?
This is how i did for file field
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()
You can take it as example and look in source what InMemoryUploadedFile class needs in initialization parameters.
- Python logging to multiple files
- How to count number of items in queryset without count()
- Does Django have a way to open a HTTP long poll connection?
- Unable to import Django.shortcuts
1👍
You could implement a form with a file upload field by using form instances, here is the view:
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() saves the uploaded file along with all the other fields as you included request.FILES argument in it’s constructor. In your models you have to define FooForm subclass of ModelForm class like this:
class FooForm(ModleForm):
Meta:
model = Foo
…where Foo is the subclass of Model, that describes the data you want to store persistently.