DateTime字段显示无效的格式错误,同时通过窗体传递空值 [英] DateTime Field shows invalid format error while passing empty value through form

查看:50
本文介绍了DateTime字段显示无效的格式错误,同时通过窗体传递空值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试提交表单,同时将datetime的字段保留为空,这会导致错误,显示datetime的格式无效.

I trying to submit form while keeping field for datetime as empty which results in an error showing invalid format for datetime.

我的模态

class lead(models.Model):
    assigned_to=models.CharField(max_length=15)
    ref=models.CharField(max_length=10,blank=True)
    lead_type=models.CharField(max_length=20)
    priority=models.CharField(max_length=20)
    hot=models.CharField(max_length=20,blank=True)
    source=models.CharField(max_length=20,blank=True)
    mls_lead=models.CharField(max_length=20,blank=True)
    auto_imported=models.CharField(max_length=20,blank=True)
    inquiry_date=models.DateTimeField(blank=True,null=True)
    lead_closed_date=models.DateTimeField(blank=True,null=True)
    created_by=models.CharField(max_length=20,blank=True)
    property_id=models.IntegerField(blank=True,null=True)
    contact_id=models.IntegerField(blank=True,null=True)

很明显,我为datetime字段和表单提供了null tr​​ue我有我的表格

its clear that i have given null true for the datetime field and the form i have is my form

class leads_form(forms.Form):
    assigned_to = forms.ChoiceField(choices=[(o.id, str(o.username)) for o in CustomUser.objects.all()],required=True,widget=forms.Select(attrs={'class':'form-control'}))
    ref = forms.CharField(max_length=50,required=False,widget=forms.TextInput(attrs={'class':'form-control'}))
    lead_type = forms.ChoiceField(choices=dicto.lead_type_dict.items(),required=True,widget=forms.Select(attrs={'class':'form-control slct'}))
    priority = forms.ChoiceField(choices=dicto.priority_dict.items(),required=True,widget=forms.Select(attrs={'class':'form-control slct'}))
    hot = forms.ChoiceField(choices=dicto.hot_dict.items(),required=True,widget=forms.Select(attrs={'class':'form-control slct'}))
    source = forms.ChoiceField(choices=dicto.source_dict.items(),required=True,widget=forms.Select(attrs={'class':'form-control slct'}))
    mls_lead = forms.ChoiceField(choices=dicto.true_false_dict.items(),required=True,widget=forms.Select(attrs={'class':'form-control slct'}))
    auto_imported = forms.ChoiceField(choices=dicto.true_false_dict.items(),required=False,widget=forms.Select(attrs={'class':'form-control slct'}))
    inquiry_date = forms.CharField(max_length=50,required=False,widget=forms.TextInput(attrs={'class':'form-control'}))
    lead_closed_date = forms.CharField(max_length=50,required=False,widget=forms.TextInput(attrs={'class':'form-control'}))
    created_by = forms.CharField(max_length=50,required=False,widget=forms.TextInput(attrs={'class':'form-control'}))
    property_id =  forms.IntegerField(required=False,widget=forms.HiddenInput())
    set_status = forms.ChoiceField(choices=dicto.set_status_dict.items(),required=True,widget=forms.Select(attrs={'class':'form-control slct','placeholder':'set status','required':'true'}))
    contact=forms.IntegerField(required=True,widget=forms.HiddenInput(attrs={'required':'true'}))

并且当我尝试使用验证表单数据创建模型对象时显示

and when i try to create object of model with validate form data it shows

django.core.exceptions.ValidationError: ["'' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."]

我创建对象的方式如下

if form.is_valid():
            lead.objects.create(
                assigned_to=form.cleaned_data['assigned_to'],
                ref=form.cleaned_data['ref'],
                lead_type=form.cleaned_data['lead_type'],
                priority=form.cleaned_data['priority'],
                hot=form.cleaned_data['hot'],
                source=form.cleaned_data['source'],
                mls_lead=form.cleaned_data['mls_lead'],
                auto_imported=form.cleaned_data['auto_imported'],
                inquiry_date=form.cleaned_data['inquiry_date'],
                lead_closed_date=form.cleaned_data['lead_closed_date'],
                created_by=form.cleaned_data['created_by'],
                property_id=form.cleaned_data['property_id'],
                contact_id=form.cleaned_data['contact'])

推荐答案

对于Django的 DateTimeField ,空白字符串与 None (或null)不同.我相信这种混淆来自对空白字符串和 None 的真值的类似评估.

To Django's DateTimeField, a blank string is not the same as None (or null). I believe this confusion comes from the similar evaluation of truth values for a blank string and None.

要断言没有引发错误,并且在需要时使用空值填充字段,请对 DateTimeField 填充这样的行(从 lead.objects.create 致电):

To assert no error is raised and the field is populated with a null value when wanted, rework DateTimeField populating lines like this one (from the lead.objects.create call):

lead_closed_date=form.cleaned_data['lead_closed_date']

对此:

lead_closed_date=(
    form.cleaned_data['lead_closed_date'] 
    if form.cleaned_data['lead_closed_date'] 
    else None
)

进行此更正后,如果真相值<,则将使用 form.cleaned_date ['lead_closed_date'] 填充 lead_closed_date 的值.code> form.cleaned_data ['lead_closed_date'] 是 True .

With this correction, it will populate the value of lead_closed_date with form.cleaned_date['lead_closed_date'] if the truth value of form.cleaned_data['lead_closed_date'] is True.

这篇关于DateTime字段显示无效的格式错误,同时通过窗体传递空值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆