为Django DateField和Postgresql指定默认值

时间:2016-04-25 17:05:47

标签: django postgresql date default

我正在运行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;

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

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

我很想保留使用Django,但我真的想弄清楚如何尽可能地利用这个框架。

如何设置一个设定值的默认值(即不是从default=datetime.now那样派生出来的?)

1 个答案:

答案 0 :(得分:3)

Django从不在数据库中设置默认值。尽管如此,它会愉快地使用您提供的任何值作为默认值,因此完全可以传递静态日期:

userStartEmployment = models.DateField(default=datetime.date(2015,1,1))
相关问题