我无法解决Django模型.DateField ValidationError

时间:2016-02-05 14:10:08

标签: python django database django-models

我遇到了models.DateField()

的错误

首先,我这样做了。

models.py

from datetime import date, datetime
from django.db import models

class User(models.Model):
    uid = models.AutoField(primary_key=True)
    birthdate = models.DateField()

然后,我得到了,

$ python manage.py makemigrations
You are trying to add a non-nullable field 'birthdate' to user_profile without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows)
 2) Quit, and let me add a default in models.py

所以,我做了,

models.py

from datetime import date, datetime
from django.db import models

class User(models.Model):
    uid = models.AutoField(primary_key=True)
    birthdate = models.DateField(default=date.today)

然后,

$ python manage.py migrate
django.core.exceptions.ValidationError: ["'' は無効な日付形式です。YYYY-MM-DD形式にしなければなりません。"]

错误意味着,像"''对于日期格式无效。你应该改成YYYY-MM-DD"。

我应该如何更改此代码? 谢谢。

///其他/// 如果可以,我不想将日期插入INTO birthdate字段。但似乎我必须这样做。我可以把它留空吗?

birthdate = models.DateField(null=True, blank=False)

没有工作。

Python 3.5.1 Django 1.9.1

3 个答案:

答案 0 :(得分:2)

听起来你的迁移文件搞砸了。当您进行迁移时,django将创建一个记录您所执行操作的迁移文件。简而言之,您多次更改了模型代码,但您从未更改过迁移文件,或者您正在创建重复的迁移文件。

以下应该是您想要的,

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

但是正如您所注意到的那样,清理与此更改相关的所有迁移文件并创建一个新文件应该可以解决问题。

答案 1 :(得分:1)

你所尝试的应该有效:

birthdate = models.DateField(null=True, blank=False)

这允许数据库接受空值(它在迁移期间执行),空白表示django不接受表单中的空值。

确保删除已制作但未应用的迁移。同时尝试删除项目中的所有.pyc。

答案 2 :(得分:1)

试试这个,

birthdate = models.DateField(null=True, blank=False)