为 Django DateField 和 Postgresql 指定默认值

Specifying a default value for Django DateField and Postgresql

我运行正在使用 Django 1.9.5 和 PostgreSQL 9.5。我的应用程序的模型是:

from django.db import models

class users(models.Model):
    userId = models.AutoField(primary_key=True)
    userUserKey = models.CharField(max_length=255)
    userUserName = models.CharField(max_length=255)
    userLastName = models.CharField(max_length=255)
    userFirstName = models.CharField(max_length=255)
    userActive = models.IntegerField()
    userStartEmployment = models.DateField(default='2015-01-01")
    userEndEmployment = models.DateField(null=True)

迁移文件显示:

...
('userStartEmployment', models.DateField(default='2015-01-01')),
...

sqlmigrate 显示:

BEGIN;
--
-- Create model users
--
CREATE TABLE "login_users" (
    "userId" serial NOT NULL PRIMARY KEY, 
    "userUserKey" varchar(255) NOT NULL, 
    "userUserName" varchar(255) NOT NULL, 
    "userLastName" varchar(255) NOT NULL, 
    "userFirstName" varchar(255) NOT NULL, 
    "userActive" integer NOT NULL, 
    "userStartEmployment" date NOT NULL, 
    "userEndEmployment" date NULL);
COMMIT;

当我 运行 迁移时,没有任何错误,并且创建的 table 没有任何默认值。这在 SQL 中很容易做到。从 PostgreSQL 创建 table 脚本:

"userStartEmployment" date DEFAULT '2015-01-01'::date,

我很想为此放弃使用 Django,但我真的很想弄清楚如何尽可能多地利用该框架。

如何设置默认值作为设定值(即不是从 default=datetime.now 之类的东西派生的)?

Django 从不在数据库中设置默认值。不过,它会很乐意使用您给它的任何值作为默认值,因此完全可以传递静态日期:

userStartEmployment = models.DateField(default=datetime.date(2015,1,1))