我有一个formset(更具体地说是一个通用的内联formset),其表单有一个ImageField。在解决了几个Django错误之后,一切正常,但是当我用新图像填充空白表单并单击save
时,页面在POST请求后刷新并且新图像不是那里。我刚刚保存的表单的其他字段在那里并且已正确填充,但图像URL未显示。数据库记录保存正确,如果我只是刷新页面,图像就会正确显示。但我无法弄清楚如何从POST返回所有新保存的信息,而无需额外刷新页面。
如果它是相关的,对于这个ImageField,我使用的是自定义Storage类,它通过API处理在远程服务器中保存图像。
解决问题的解决方法,但在我看来不应该是必要的:
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(...)
您可以在另一个问题中找到有关我的代码的更多详细信息:
知道为什么会这样吗?我做错了什么或者这是一个Django错误?感谢。
更新
有一件事我忘了说:保存后显示的formset不仅有新创建的Image对象的空白Image字段,它也没有应该存在的新记录的额外空白表单。它也只会在刷新后出现。
(我将extra=1
传递给generic_inlineformset_factory
):
ProductImageInlineFormset = generic_inlineformset_factory(
Image, form=ProductImageForm, extra=1)