Author: carljm
Date: 2010-11-18 17:29:58 -0600 (Thu, 18 Nov 2010)
New Revision: 14613
Modified:
django/trunk/django/db/models/base.py
django/trunk/django/db/models/query.py
django/trunk/django/forms/models.py
django/trunk/tests/regressiontests/model_regress/models.py
django/trunk/tests/regressiontests/model_regress/tests.py
Log:
Fixed pk uniqueness validation for new objects created outside of a ModelForm.
Also removed need for ModelForm to poke at Model._state.adding, keeping it an
internal ORM concern.
Modified: django/trunk/django/db/models/base.py
===================================================================
--- django/trunk/django/db/models/base.py 2010-11-18 22:43:46 UTC (rev
14612)
+++ django/trunk/django/db/models/base.py 2010-11-18 23:29:58 UTC (rev
14613)
@@ -265,7 +265,7 @@
# If true, uniqueness validation checks will consider this a new,
as-yet-unsaved object.
# Necessary for correct validation of new instances of objects with
explicit (non-auto) PKs.
# This impacts validation only; it has no effect on the actual save.
- self.adding = False
+ self.adding = True
class Model(object):
__metaclass__ = ModelBase
Modified: django/trunk/django/db/models/query.py
===================================================================
--- django/trunk/django/db/models/query.py 2010-11-18 22:43:46 UTC (rev
14612)
+++ django/trunk/django/db/models/query.py 2010-11-18 23:29:58 UTC (rev
14613)
@@ -284,6 +284,8 @@
# Store the source database of the object
obj._state.db = self.db
+ # This object came from the database; it's not being added.
+ obj._state.adding = False
for i, k in enumerate(extra_select):
setattr(obj, k, row[i])
@@ -1204,6 +1206,7 @@
# If an object was retrieved, set the database state.
if obj:
obj._state.db = using
+ obj._state.adding = False
index_end = index_start + field_count + offset
# Iterate over each related object, populating any
@@ -1387,6 +1390,7 @@
setattr(instance, field, value)
instance._state.db = self.query.using
+ instance._state.adding = False
return instance
Modified: django/trunk/django/forms/models.py
===================================================================
--- django/trunk/django/forms/models.py 2010-11-18 22:43:46 UTC (rev 14612)
+++ django/trunk/django/forms/models.py 2010-11-18 23:29:58 UTC (rev 14613)
@@ -254,10 +254,8 @@
# if we didn't get an instance, instantiate a new one
self.instance = opts.model()
object_data = {}
- self.instance._state.adding = True
else:
self.instance = instance
- self.instance._state.adding = False
object_data = model_to_dict(instance, opts.fields, opts.exclude)
# if initial was provided, it should override the values from instance
if initial is not None:
Modified: django/trunk/tests/regressiontests/model_regress/models.py
===================================================================
--- django/trunk/tests/regressiontests/model_regress/models.py 2010-11-18
22:43:46 UTC (rev 14612)
+++ django/trunk/tests/regressiontests/model_regress/models.py 2010-11-18
23:29:58 UTC (rev 14613)
@@ -58,6 +58,8 @@
# object).
return 'Názov: %s' % self.name
+class NonAutoPK(models.Model):
+ name = models.CharField(max_length=10, primary_key=True)
__test__ = {'API_TESTS': """
(NOTE: Part of the regression test here is merely parsing the model
Modified: django/trunk/tests/regressiontests/model_regress/tests.py
===================================================================
--- django/trunk/tests/regressiontests/model_regress/tests.py 2010-11-18
22:43:46 UTC (rev 14612)
+++ django/trunk/tests/regressiontests/model_regress/tests.py 2010-11-18
23:29:58 UTC (rev 14613)
@@ -1,16 +1,26 @@
-from models import Worker
+from django.core.exceptions import ValidationError
from django.test import TestCase
+from models import Worker, NonAutoPK
+
+
class RelatedModelOrderedLookupTest(TestCase):
"""
Regression test for #10153: foreign key __gte and __lte lookups.
"""
-
+
# The bug is that the following queries would raise:
# "TypeError: Related Field has invalid lookup: gte"
-
+
def test_related_gte_lookup(self):
Worker.objects.filter(department__gte=0)
def test_related_lte_lookup(self):
Worker.objects.filter(department__lte=0)
+
+
+class ModelValidationTest(TestCase):
+ def test_pk_validation(self):
+ one = NonAutoPK.objects.create(name="one")
+ again = NonAutoPK(name="one")
+ self.assertRaises(ValidationError, again.validate_unique)
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en.