2016-04-25 93 views
1

我正在运行Django 1.9.5和PostgreSQL 9.5。我的应用程序的模型是:指定Django DateField和Postgresql的默认值

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的东西中派生出来的)?

回答

3

Django从不在数据库中设置默认值。它会很乐意用你给的任何值它作为默认的,虽然如此,它是完全可能通过一个静态日期:

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

如果我理解你说的话,我不会和Django得到什么我得到了原始的SQL脚本。但是,通过使用框架(即模型)向数据库添加值,Django会向其中添加一条新记录到数据库时包含“2015-01-01”的缺省日期值。我有这个权利吗? – 5280Angel

+0

是的,这是正确的。 –