【问题标题】:Django: prevent saving empty form in formsetDjango:防止在表单集中保存空表单
【发布时间】:2017-08-17 22:12:16
【问题描述】:

这应该是一个相当容易的,但我真的很难自己弄清楚。

我正在开发一个房地产应用,我需要我的用户能够上传他们的房屋图片。每个图像都与一个房子相关,每个房子都与一个用户相关。

它的工作方式,但是如果用户使用我的表单集提交一个空表单,整个事情就会中断,因为它向用户和房子注册了一个不存在的图像。我怎样才能防止这种情况发生?

这是我的观点:

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:

【问题讨论】:

标签: django django-forms django-views formsets


【解决方案1】:

我必须确定哪些表单带有空的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))

【讨论】:

    猜你喜欢
    • 2018-01-11
    • 2014-04-18
    • 2012-09-11
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    相关资源
    最近更新 更多