0

I have a formset (more specifically a generic inline formset) whose forms have an ImageField. After working around what seems to be a few Django bugs, everything is working fine, except that when I fill the blank form with a new image and click save, the page refreshes after the POST request and the new image is not there. The other fields of the form I just saved are there and are properly filled, but the image URL doesn't show up. The database record is saved correctly and if I simply refresh the page, the image shows up correctly. But I can't figure out how to return from the POST with all the newly saved information without having to refresh the page an extra time.

In case it's relevant, for this ImageField I am using a custom Storage class which handles saving the image in a remote server through an API.

A workaround that solves the problem but which in my opinion shouldn't be necessary:

class ProductImagesView(View):
    ...
    def post(self, request, id):
        product = get_object_or_404(Product.objects.by_id(id))
        image_formset = ProductImageInlineFormset(
            request.POST, request.FILES, instance=product)
        if image_formset.is_valid():
            image_formset.save()

        image_formset = ProductImageInlineFormset(instance=product)  # Workaround
        return render(...)

You can find more details about my code in this other question:

Any idea why this is happening? Am I doing something wrong or is this a Django bug? Thanks.

UPDATE

One thing I forgot to say: the formset that shows up after saving not only has a blank Image field for the newly created Image object, it also doesn't have the extra blank form for new records that should be there. It also only appears after a refresh.

(I pass extra=1 to the generic_inlineformset_factory):

ProductImageInlineFormset = generic_inlineformset_factory(
    Image, form=ProductImageForm, extra=1)
Community
  • 1
  • 1
Ariel
  • 3,383
  • 4
  • 43
  • 58
  • Make sure
    that posted the request has the attribute enctype="multipart/form-data"?
    – Wtower Sep 30 '15 at 13:42
  • Hey, thanks for the quick reply. The attribute is there though. Without it `request.FILES` would be empty, but it's not. All the validation works and the image records are successfully saved to the database and the actual image files are successfully registered in the remote server. I just don't see the new image there when the page loads after the POST. I need a refresh. – Ariel Sep 30 '15 at 14:24

0 Answers0