【问题标题】:Django ModelFormset error empty form fieldDjango ModelFormset 错误空表单字段
【发布时间】:2019-09-07 08:15:38
【问题描述】:

Django 决定在我提交表单时抛出一个错误。该表单是一个模型表单集,我完全没有更改默认设置,只需单击提交按钮。 Django 抱怨唯一的空表单需要有一个值,当我将其更改为 required = False 时:

forms.CharField(max_length = 40, required = False)

它停止抱怨。这是我的表格:

class RateForm(ModelForm):
    costcode =  forms.CharField(max_length = 40, required = False)
    class Meta:
        model = Rate
        fields = ['costcode', 'rate', 'UOM', ]

class BaseRateFormSet(BaseModelFormSet):
    def clean(self):
        ''' No custom cleaning at this point.'''
        cd = super(BaseRateFormSet, self).clean()

为了查看发生了什么,我编写了自定义清理,当我在其后添加 assert False 时,发现 cd 为 None。

观点:

rate_formset = RateFormSet(request.POST if any(request.POST) else None, 
                                            prefix = user.short_name, 
                                            form_kwargs = the_form_kwargs, 
                                            **user_form_kwargs)

实际上,字段 costcode 应该是必需的,但 Django 应该意识到用户不希望提交任何额外的表单,因此它不会产生错误。如何让 Django 不在空表单上抛出错误?

【问题讨论】:

    标签: django django-forms django-views


    【解决方案1】:

    你可以使用 try 和 except ...

    Try: 
         rate_formset = RateFormSet(request.POST if any(request.POST) else None, 
                                                prefix = user.short_name, 
                                                form_kwargs = the_form_kwargs, 
                                                **user_form_kwargs)
    Except:
         ....
    

    (显示您的所有观点,我可以提供更多帮助...)

    【讨论】:

    • 问题是为什么它要求表单集中的空表单具有非空字段?
    • 因为它不是“空的”;它'不是必需的'。一个空实体将是“Null=True”,而不是“Required=False”...尝试从您的模型字段中删除 null=false,我假设它在那里...
    猜你喜欢
    • 2021-04-03
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 2013-02-01
    • 2018-02-10
    • 2012-04-15
    • 2023-03-06
    • 2012-07-24
    相关资源
    最近更新 更多