关于python:我无法解决Django models.DateField ValidationError

I cannot solve Django models.DateField ValidationError

models.datefield()出错。

首先,我做到了。

型号.py

1
2
3
4
5
6
from datetime import date, datetime
from django.db import models

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

然后,我得到,

1
2
3
4
5
$ 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

所以,我做到了,

型号.py

1
2
3
4
5
6
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)

然后,

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

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

如何更改此代码?谢谢您。

///附加///如果可以,我不想在"生日"字段中插入日期。但看来我必须这么做。我可以让它空白吗?

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

没用。

Python3.5.1姜戈1.9.1


听起来您的迁移文件有问题。当您进行迁移时,Django将创建一个记录您所做操作的迁移文件。因此,简而言之,您多次更改了模型代码,但从未更改迁移文件,或者正在创建重复的迁移文件。

以下应该是你想要的,

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

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


试试这个,

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


你所尝试的应该有效:

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

这允许数据库接受空值(在迁移期间是这样),而空值意味着Django将不接受表单中的空值。

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