django - 防止 Django 从表单集中保存特定表单

标签 django django-models django-forms

我正在使用 Django 表单集,我正试图阻止某些可以部分填写的表单被保存。

表格:

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 动态生成表单,它会自动填充“事件”字段,但问题是有时用户可能决定不填写其他字段(那些以工作日、“星期一”、“星期二”命名的字段) , ETC...)。如果是这种情况,我最终会得到一个我不想保存的“空”表单(不是真的空,因为字段“事件”已填充)。

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

View .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")

我真的很挣扎,我尝试了几种方法都没有成功。

最佳答案

只保存匹配的表单:

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 从表单集中保存特定表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74091058/

相关文章:

jquery - 如何循环遍历 jquery 中具有不同 id 的所有标签?

django - 测试套接字激活失败,Django 和 Gunicorn

django - ufw 禁止 docker 容器连接到 postgres

django - 为什么在尝试使用管理员时出现 "no such table: django_session"?

python - Django Allauth 注册阻止登录

django-models - Django 管理员错误指出表单中缺少一个字段

django - 使用 Django LocalFlavor Zip 作为模型字段

python - 无法使用_set查询外键相关对象| Django ?

django - 需要有关 Django ModelForm : How to filter ForeignKey/ManyToManyField? 的帮助

Django 复选框字段