所以,我有一个django模型表单集,允许用户在一个虚假的电子商务网站上上传多个列表。当用户第一次访问“上传页面”时,表单是清晰的,没有问题。不过,在用户上传了一些项目之后,django似乎是在用用户之前提交的信息预先填充表单。我不想这样,我也不知道该怎么预防。以下是forms.py:
class ProductModelForm(forms.ModelForm):
class Meta:
model = Product
fields = [
"product_name",
"product_description",
"product_price",
]
class ProductImageModelForm(forms.ModelForm):
class Meta:
model = ProductImage
fields = [
"product_image",
]
ProductModelFormSet = modelformset_factory(
Product,
fields=(
"product_name",
"product_description",
"product_price",
),
extra=3,
)
ProductImageModelFormSet = modelformset_factory(
ProductImage,
fields=(
"product_image",
),
extra=3,
)
字符串
下面是处理它的视图:
@login_required
def product_upload_view(request):
if request.method == "POST":
product_form_set = ProductModelFormSet(request.POST)
product_image_form_set = ProductImageModelFormSet(request.POST, request.FILES)
if (product_form_set.is_valid() and product_image_form_set.is_valid()):
for obj, obj_image in zip(product_form_set.save(commit=False), product_image_form_set.save(commit=False)):
obj.product_seller = request.user
obj.product_pub_date = timezone.now()
obj.product_image = obj_image
obj_image.save()
obj.save()
return HttpResponseRedirect("somewhere/else/")
product_form_set = ProductModelFormSet()
product_image_form_set = ProductImageModelFormSet()
return render(request, "products/upload.html", {
"product_form_set": product_form_set,
"product_image_form_set": product_image_form_set,
})
型
现在,我不知道我是否解释了我的问题,因为我似乎在网上找不到答案,但我相信其他人也有过同样的问题。基本上,当用户第一次尝试上传内容时,表单集是完全空的,并且一切正常。然后,在他们上传并被重定向到另一个页面之后,如果他们再次尝试上传,表单将预先填充前一个表单集中的数据,这似乎只是在最后附加了一个全新的表单集。我只是想要一个全新的,新鲜的表单集,就像你可以做的所有常规表单(包括模型表单)。我错过了什么吗?谢谢你的帮助!
1条答案
按热度按时间fzwojiic1#
也许有点古怪,但如果你想在提交表单后重置 ModelFormset,只需在提交后用空的 FormSet 渲染页面,如下所示:
字符串
如果设置为空 queryset,则没有数据可显示。我甚至使用 initial 参数将一些初始数据设置为表单。