2016-04-25 91 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

是的,這是正確的。 –