1
0
mirror of https://github.com/django/django.git synced 2025-07-07 11:19:12 +00:00

[soc2009/model-validation] Fixed #12132: unneccessary unique_check for primary key when not adding model

git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2009/model-validation@11856 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Honza Král 2009-12-13 21:39:46 +00:00
parent 3b895d4a9a
commit 695de8cc91
3 changed files with 31 additions and 2 deletions

View File

@ -678,6 +678,10 @@ class Model(object):
f = self._meta.get_field(field_name) f = self._meta.get_field(field_name)
lookup_value = getattr(self, f.attname) lookup_value = getattr(self, f.attname)
if f.null and lookup_value is None: if f.null and lookup_value is None:
# no value, skip the lookup
continue
if f.primary_key and not getattr(self, '_adding', False):
# no need to check for unique primary key when editting
continue continue
lookup_kwargs[str(field_name)] = lookup_value lookup_kwargs[str(field_name)] = lookup_value

View File

@ -1,6 +1,9 @@
import unittest import unittest
from models import CustomPKModel, UniqueTogetherModel, UniqueFieldsModel, UniqueForDateModel from django.conf import settings
from django.db import connection
from models import CustomPKModel, UniqueTogetherModel, UniqueFieldsModel, UniqueForDateModel, ModelToValidate
class GetUniqueCheckTests(unittest.TestCase): class GetUniqueCheckTests(unittest.TestCase):
def test_unique_fields_get_collected(self): def test_unique_fields_get_collected(self):
@ -24,4 +27,26 @@ class GetUniqueCheckTests(unittest.TestCase):
) )
class PerformUniqueChecksTest(unittest.TestCase):
def setUp(self):
self._old_debug, settings.DEBUG = settings.DEBUG, True
super(PerformUniqueChecksTest, self).setUp()
def tearDown(self):
settings.DEBUG = self._old_debug
super(PerformUniqueChecksTest, self).tearDown()
def test_primary_key_unique_check_performed_when_adding(self):
"Check#12132"
l = len(connection.queries)
mtv = ModelToValidate(number=10, name='Some Name')
setattr(mtv, '_adding', True)
mtv.clean()
self.assertEqual(l+1, len(connection.queries))
def test_primary_key_unique_check_not_performed_when_not_adding(self):
"Check#12132"
l = len(connection.queries)
mtv = ModelToValidate(number=10, name='Some Name')
mtv.clean()
self.assertEqual(l, len(connection.queries))

View File

@ -5,7 +5,7 @@ from modeltests.validation import ValidationTestCase
from models import * from models import *
from validators import TestModelsWithValidators from validators import TestModelsWithValidators
from test_unique import GetUniqueCheckTests from test_unique import GetUniqueCheckTests, PerformUniqueChecksTest
from test_custom_messages import CustomMessagesTest from test_custom_messages import CustomMessagesTest
class BaseModelValidationTests(ValidationTestCase): class BaseModelValidationTests(ValidationTestCase):