5280Angel
5280Angel

Reputation: 101

Specifying a default value for Django DateField and Postgresql

I'm running Django 1.9.5 and PostgreSQL 9.5. The model for my app is:

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)

The migration file shows:

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

sqlmigrate shows:

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;

When I run migrate, there are no errors and the table is created without any default value. This is trivial to do in SQL. From a PostgreSQL create table script:

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

I'm tempted to bail on using Django for this, but I'd really like to figure out how to leverage the framework as much as I can.

How can I set a default value that is a set value (i.e. not derived from something like default=datetime.now)?

Upvotes: 2

Views: 2719

Answers (1)

Daniel Roseman
Daniel Roseman

Reputation: 599480

Django never sets defaults in the database. It will happily use whatever value you give it as the default, though, so it is perfectly possible to pass a static date:

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

Upvotes: 3

Related Questions