Django:防止在表单集中保存空表单
Django: prevent saving empty form in formset
这应该是一个相当简单的问题,但我真的很难自己弄清楚。
我正在开发一个房地产应用程序,我需要我的用户能够上传他们的房屋图片。每张图片都与一个房子相关,每个房子都与一个用户相关。
它的工作方式是这样的,但是如果用户使用我的表单集提交一个空表单,整个过程就会崩溃,因为它向用户和房屋注册了一个不存在的图像。我怎样才能防止这种情况发生?
这是我的观点:
def photos_formset(request, *args, **kwargs):
pk = kwargs['pk']
ImovelPhotosModelFormset = modelformset_factory(ImovelPhotos, form=ImovelPhotosForm)
formset = ImovelPhotosModelFormset(
request.POST or None, request.FILES or None,
queryset = Imovel.objects.get(pk=pk).imovelphotos_set.all(),
)
if formset.is_valid():
for form in formset:
if not request.FILES:
break
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
obj.imovel = Imovel.objects.get(pk=pk)
obj.save()
return HttpResponseRedirect('/lares/{pk}/'.format(pk=pk))
context = {
"formset": formset,
}
return render(request, "imovel_photos.html", context)
看起来更像是一个潜在答案的是这个,但它没有用,如果我这样做什么也不会发生:
if form.is_valid() and not form.empty_permitted:
我必须确定哪些表格是空的 cleaned_data。
以下代码成功了。
if formset.is_valid():
if request.FILES:
for form in formset:
if form.is_valid():
if form.cleaned_data != {}:
obj = form.save(commit=False)
obj.user = request.user
obj.imovel = Imovel.objects.get(pk=pk)
obj.save()
return HttpResponseRedirect('/lares/{pk}/'.format(pk=pk))
这应该是一个相当简单的问题,但我真的很难自己弄清楚。
我正在开发一个房地产应用程序,我需要我的用户能够上传他们的房屋图片。每张图片都与一个房子相关,每个房子都与一个用户相关。
它的工作方式是这样的,但是如果用户使用我的表单集提交一个空表单,整个过程就会崩溃,因为它向用户和房屋注册了一个不存在的图像。我怎样才能防止这种情况发生?
这是我的观点:
def photos_formset(request, *args, **kwargs):
pk = kwargs['pk']
ImovelPhotosModelFormset = modelformset_factory(ImovelPhotos, form=ImovelPhotosForm)
formset = ImovelPhotosModelFormset(
request.POST or None, request.FILES or None,
queryset = Imovel.objects.get(pk=pk).imovelphotos_set.all(),
)
if formset.is_valid():
for form in formset:
if not request.FILES:
break
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
obj.imovel = Imovel.objects.get(pk=pk)
obj.save()
return HttpResponseRedirect('/lares/{pk}/'.format(pk=pk))
context = {
"formset": formset,
}
return render(request, "imovel_photos.html", context)
看起来更像是一个潜在答案的是这个,但它没有用,如果我这样做什么也不会发生:
if form.is_valid() and not form.empty_permitted:
我必须确定哪些表格是空的 cleaned_data。 以下代码成功了。
if formset.is_valid():
if request.FILES:
for form in formset:
if form.is_valid():
if form.cleaned_data != {}:
obj = form.save(commit=False)
obj.user = request.user
obj.imovel = Imovel.objects.get(pk=pk)
obj.save()
return HttpResponseRedirect('/lares/{pk}/'.format(pk=pk))