Can not assign None to Django DateTimeField()
<p>Can I judge this is a bug?
DateTimeField is inherited from DateField and it can be an optional</p>

<p>I have read:
<a href="https://stackoverflow.com/questions/11351619/how-to-make-djangos-datetimefield-optional">How to make Django&#39;s DateTimeField optional?</a>
<a href="https://stackoverflow.com/questions/16828315/how-can-i-make-my-model-fields-optional-in-django">How can I make my model fields optional in Django?</a></p>

<p>models.py</p>

<pre><code>class Circuit(SoftDeletionModel):
    ...
    created_datetime = models.DateTimeField(default=timezone.now)
    updated_datetime = models.DateTimeField(auto_now=True)
    expiry_datetime = models.DateTimeField(null=True, blank=True, default=None)
</code></pre>

<p>At terminal</p>

<pre><code>$ python -B manage.py makemigrations --settings=config.settings.docker
apps.circuits is ready
apps.circuits_networkdevices is ready
apps.core is ready
apps.customers is ready
apps.networkdevices is ready
apps.networkscripts is ready
apps.portal is ready
apps.bod is ready
apps.scheduler is ready
You are trying to add a non-nullable field 'updated_datetime' to circuit without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows)
 2) Quit, and let me add a default in models.py
Select an option: 1
Please enter the default value now, as valid Python
The datetime and django.utils.timezone modules are available, so you can do e.g. timezone.now()
&gt;&gt;&gt; None
Migrations for 'circuits':
  0022_auto_20161102_1714.py:
    - Add field expiry_datetime to circuit
    - Add field updated_datetime to circuit
</code></pre>

<p>migration_file.py</p>

<pre><code># -*- coding: utf-8 -*-
# Generated by Django 1.9.9 on 2016-11-02 10:14
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('circuits', '0021_auto_20161102_1653'),
    ]

    operations = [
        migrations.AddField(
            model_name='circuit',
            name='expiry_datetime',
            field=models.DateTimeField(blank=True, default=None, null=True),
        ),
        migrations.AddField(
            model_name='circuit',
            name='updated_datetime',
            field=models.DateTimeField(auto_now=True, default=None),
            preserve_default=False,
        ),
    ]
</code></pre>

<p>Error Django:</p>

<pre><code>django.db.utils.IntegrityError: column "updated_datetime" contains null values
</code></pre>

<p>Error Postgres:</p>

<pre><code>postgres_1       | ERROR:  column "expiry_datetime" contains null values
postgres_1       | STATEMENT:  ALTER TABLE "circuits_circuit" ADD COLUMN "expiry_datetime" timestamp with time zone NOT NULL
</code></pre>

<p>Spec:</p>

<pre><code>In [2]: django.VERSION
Out[2]: (1, 9, 9, 'final', 0)

$ python --version
Python 3.5.1

&gt; SELECT version();
+------------------------------------------------------------------------------------------+
| version                                                                                  |
|------------------------------------------------------------------------------------------|
| PostgreSQL 9.5.3 on x86_64-pc-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit |
+------------------------------------------------------------------------------------------+
</code></pre>