如何解决“ django.core.exceptions.ValidationError:[“”值的格式无效。它必须采用YYYY-MM-DD HH:MM [:ss [.uuuuuu]] [TZ]格式。”]”

时间:2019-04-30 15:54:07

标签: python django django-models

models.py

class Questions:
    question_text = models.CharField(max_length=200)
    pub_date = models.DateField(null=True, blank=True, default='')
    slug = `models.CharField(max_length=10, unique=True, default="question")`

    def __str__(self):
        return self.question_text

views.py

def import_sheet(request):

        if request.method == "POST":
        form = UploadFileForm(request.POST,
                              request.FILES)
        if form.is_valid():
            request.FILES['file'].save_to_database(
                name_columns_by_row=2,
                model=Question,
                mapdict=['question_text', 'pub_date', 'slug'])
            return HttpResponse("OK")
        else:
            return HttpResponseBadRequest()
    else:
        form = UploadFileForm()
    return render(request, 'perfimport/import.html', {'form': form})

内部服务器错误:/ import / 追溯(最近一次通话):   文件“ C:\ Users \ AppData \ Roaming \ Python \ Python37 \ site-packages \ django \ core \ handlers \ exception.py”,l ine 34,在内部     响应= get_response(请求)   文件“ C:\ Users \ AppData \ Roaming \ Python \ Python37 \ site-packages \ django \ core \ handlers \ base.py”,第1行 15,在_get_response中     响应= self.process_exception_by_middleware(e,请求)   文件“ C:\ Users \ AppData \ Roaming \ Python \ Python37 \ site-packages \ django \ core \ handlers \ base.py”,第1行 13,在_get_response中     响应= wraped_callback(请求,* callback_args,** callback_kwargs)   文件“ C:\ Users \ Desktop \ PerfImport \ importer \ perfimport \ views.py”,第20行,在import_sheet中     mapdict = ['question_text','pub_date','slug'])   文件“ C:\ Users \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ django_excel__init __。py”,行  49,在save_to_database中     pe.save_as(** params)   文件“ C:\ Users \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ pyexcel \ core.py”,行s,82 ave_as     返回sources.save_sheet(sheet,** dest_keywords)   文件“ C:\ Users \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ pyexcel \ internal \ core.py”,行  48,在save_sheet中     返回_save_any(a_source,工作表)   文件“ C:\ Users \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ pyexcel \ internal \ core.py”,行  60,在_save_any中     a_source.write_data(instance)   文件“ C:\ Users \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ pyexcel \ plugins \ sources \ db_sour ces.py“,第65行,在write_data中     ** self._keywords   文件“ C:\ Users \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ pyexcel \ plugins \ renderers \ djang o.py”,第37行,在render_sheet_to_stream中     **关键字   文件“ C:\ Users \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ pyexcel_io \ io.py”,第129行,在  保存数据     **关键字   文件“ C:\ Users \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ pyexcel_io \ io.py”,第146行,在  存储数据     writer.write(数据)   文件“ C:\ Users \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ pyexcel_io \ book.py”,第221行, 写     sheet_writer.close()   文件“ C:\ Users \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ pyexcel_io \ database \ importers \ d jango.py”,第54行,关闭     self。 objs,batch_size = self。__batch_size   文件“ C:\ Users \ AppData \ Roaming \ Python \ Python37 \ site-packages \ django \ db \ models \ manager.py”,第82行 ,在manager_method中     返回getattr(self.get_queryset(),name)(* args,** kwargs)   文件“ C:\ Users \ AppData \ Roaming \ Python \ Python37 \ site-packages \ django \ db \ models \ query.py”,行474,  在bulk_create     ids = self._batched_insert(objs_without_pk,字段,batch_size,ignore_conflicts = ignore_conflicts)   文件“ C:\ Users \ AppData \ Roaming \ Python \ Python37 \ site-packages \ django \ db \ models \ query.py”,第1211行 ,位于_batched_insert中     self._insert(项目,字段=字段,使用= self.db,ignore_conflicts = ignore_conflicts)   文件“ C:\ Users \ AppData \ Roaming \ Python \ Python37 \ site-packages \ django \ db \ models \ query.py”,行1186 ,在_insert中     返回query.get_compiler(using = using).execute_sql(return_id)   文件“ C:\ Users \ AppData \ Roaming \ Python \ Python37 \ site-packages \ django \ db \ models \ sql \ compiler.py”,li ne 1331,在execute_sql中     对于sql,self.as_sql()中的参数:   文件“ C:\ Users \ AppData \ Roaming \ Python \ Python37 \ site-packages \ django \ db \ models \ sql \ compiler.py”,li ne 1275,在as_sql中     用于self.query.objs中的obj   文件“ C:\ Users \ AppData \ Roaming \ Python \ Python37 \ site-packages \ django \ db \ models \ sql \ compiler.py”,li ne 1275,在     用于self.query.objs中的obj   文件“ C:\ Users \ AppData \ Roaming \ Python \ Python37 \ site-packages \ django \ db \ models \ sql \ compiler.py”,li ne 1274,在     [用于字段中字段的self.prepare_value(field,self.pre_save_val(field,obj))]   文件“ C:\ Users \ AppData \ Roaming \ Python \ Python37 \ site-packages \ django \ db \ models \ sql \ compiler.py”,li ne 1215,在prepare_value中     值= field.get_db_prep_save(值,连接=自连接)   文件“ C:\ Users \ AppData \ Roaming \ Python \ Python37 \ site-packages \ django \ db \ models \ fields__init .py”,  第789行,在get_db_prep_save中     返回self.get_db_prep_value(值,连接=连接,准备=假)   文件“ C:\ Users \ AppData \ Roaming \ Python \ Python37 \ site-packages \ django \ db \ models \ fields__init __。py”,  第1273行,在get_db_prep_value中     值= self.get_prep_value(值)   文件“ C:\ Users \ AppData \ Roaming \ Python \ Python37 \ site-packages \ django \ db \ models \ fields__init __。py”,  第1268行,在get_prep_value中     返回self.to_python(value)   文件“ C:\ Users \ AppData \ Roaming \ Python \ Python37 \ site-packages \ django \ db \ models \ fields__init __。py”,  第1243行,在to_python中     params = {'value':value}, django.core.exceptions.ValidationError:[“'pub_date'值的日期格式无效。它必须为YYYY-MM-DD格式

2 个答案:

答案 0 :(得分:0)

这是由于您试图放入数据库中的数据引起的错误,或者是由您拥有的表单引起的。似乎更有可能来自模型验证,但是我不确定是否没有表单类。

我假设这是来自Question模型上的pub_date字段,因此输入的数据不是表格/模型所期望的格式。如果您可以共享实际数据(或有用的示例),我们可以帮助您排除导致错误的确切原因。

答案 1 :(得分:0)

您的默认日期不能为空字符串。由于您允许使用NULL,因此无需设置默认值,这样,如果缺少日期,日期将仅为NULL

所以改变:

pub_date = models.DateField(null=True, blank=True, default='')

收件人:

pub_date = models.DateField(null=True, blank=True)