From ee86e590516250a7db7bf7c9a979ced4faf4edd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Modzelewski?= Date: Fri, 2 Jan 2015 02:47:49 +0100 Subject: [PATCH] Refs #2443 -- Allowed creation of objects with NULL DurationFields --- django/db/models/fields/__init__.py | 2 ++ tests/model_fields/models.py | 4 ++++ tests/model_fields/test_durationfield.py | 7 ++++++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index e090dc625a5..5d34137bf2c 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -1651,6 +1651,8 @@ class DurationField(Field): def get_db_prep_value(self, value, connection, prepared=False): if connection.features.has_native_duration_field: return value + if value is None: + return None return value.total_seconds() * 1000000 def get_db_converters(self, connection): diff --git a/tests/model_fields/models.py b/tests/model_fields/models.py index 376a59c4139..2c6b707b885 100644 --- a/tests/model_fields/models.py +++ b/tests/model_fields/models.py @@ -129,6 +129,10 @@ class DurationModel(models.Model): field = models.DurationField() +class NullDurationModel(models.Model): + field = models.DurationField(null=True) + + class PrimaryKeyCharModel(models.Model): string = models.CharField(max_length=10, primary_key=True) diff --git a/tests/model_fields/test_durationfield.py b/tests/model_fields/test_durationfield.py index fc2c22af61d..0ef160104d9 100644 --- a/tests/model_fields/test_durationfield.py +++ b/tests/model_fields/test_durationfield.py @@ -5,7 +5,7 @@ from django.core import exceptions, serializers from django.db import models from django.test import TestCase -from .models import DurationModel +from .models import DurationModel, NullDurationModel class TestSaveLoad(TestCase): @@ -16,6 +16,11 @@ class TestSaveLoad(TestCase): loaded = DurationModel.objects.get() self.assertEqual(loaded.field, duration) + def test_create_empty(self): + NullDurationModel.objects.create() + loaded = NullDurationModel.objects.get() + self.assertEqual(loaded.field, None) + class TestQuerying(TestCase):