mirror of
https://github.com/django/django.git
synced 2025-07-07 03:09:22 +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:
parent
3b895d4a9a
commit
695de8cc91
@ -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
|
||||||
|
|
||||||
|
@ -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))
|
||||||
|
@ -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):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user