我正在使用Django表单集,我正在try 阻止某些可以部分填写以保存的表单.

表格:

class WeeksForm(forms.ModelForm):
    monday = forms.DecimalField(required=False)
    tuesday = forms.DecimalField(required=False)
    wednesday = forms.DecimalField(required=False)
    thursday = forms.DecimalField(required=False)
    friday = forms.DecimalField(required=False)
    saturday = forms.DecimalField(required=False)
    sunday = forms.DecimalField(required=False)

    class Meta:
        model = Weeks
        fields = ('activity', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday')

表单集:

WeeksFormset = modelformset_factory(Weeks, form=WeeksForm, extra=10, can_delete=True)

我使用JS动态生成表单,它会自动填充"活动"域,但问题是,有时用户可能会决定不填写其他域(以工作日、"星期一"、"星期二"等命名的那些域).如果是这种情况,我最终会得到一个我不想保存的"空"表单(并不是真的空,因为"活动"域已填满).

在我看来,我试图以某种方式防止这些表单被保存:

Views.py

if request.method == 'POST':
        formset = WeeksFormset(request.POST)
        if formset.is_valid():
            for form in formset.forms:
                # From here is pseudocode, I want that if a form has all the weekdays empty that form is not saved
                if form.instance.monday and form.instance.tuesday and ... form.instance.sunday == None:
                    form.delete()
                # End of pseudocode, this approach didn't work

                form.instance.user = request.user 
            formset.save()
            return HttpResponseRedirect(reverse("time")

我真的很难解决这个问题,我已经try 了几种方法,但都没有成功.

推荐答案

只需保存匹配的表单:

if request.method == 'POST':
    formset = WeeksFormset(request.POST)
    if formset.is_valid():
        for form in formset.forms:
            instance = form.instance
            if any(
                f is not None
                for f in [
                    instance.monday,
                    instance.tuesday,
                    instance.wednesday,
                    instance.thursday,
                    instance.friday,
                    instance.saturday,
                    instance.sunday,
                ]
            ):
                instance.user = request.user
                form.save()
        # do *not* save the formset
        return redirect('time')

Django相关问答推荐

Django中的设计用户类

如何将Django项目连接到容器化的PostgreSQL数据库?

如何在 Django 中设置与 Session 相关的字段

Django Form标签和action属性

DjangoRestFramework 解析错误:"多部分表单解析错误多部分中的无效边界:None"

Django Inline Tabular admin:删除一个不工作的对象

如何在 createsuperuser 中实例化表

如何计算 Django 模型中特定对象的数量?

在模板中调用 FileField 对象会呈现不正确的路径

Django REST Framework 图片上传

Django ORM,按天分组

Django REST Framework - 将额外参数传递给操作

Django:get_or_create 使用 together_unique 引发重复条目

django.core.exceptions.ImproperlyConfigured:请求设置 USE_I18N,但未配置设置

Django unique=True 不工作

在 Django 中使用 LiveServerTestCase 时使用代码登录

用于创建和更新的基于 Django 类的视图

django select_related - 何时使用它

Django:必须使用对象 pk 或 slug 调用通用详细视图

Python Django 的多线程