Author: jezdez
Date: 2011-08-13 04:53:42 -0700 (Sat, 13 Aug 2011)
New Revision: 16614
Modified:
django/trunk/django/db/models/fields/__init__.py
django/trunk/tests/regressiontests/model_fields/models.py
django/trunk/tests/regressiontests/model_fields/tests.py
Log:
Fixed #14695 -- Stopped model fields from incorrectly overwriting the field
name during model initialization if it was already passed as a keyword
argument. Thanks, erikrose and willhardy.
Modified: django/trunk/django/db/models/fields/__init__.py
===================================================================
--- django/trunk/django/db/models/fields/__init__.py 2011-08-13 11:53:33 UTC
(rev 16613)
+++ django/trunk/django/db/models/fields/__init__.py 2011-08-13 11:53:42 UTC
(rev 16614)
@@ -220,15 +220,16 @@
except KeyError:
return None
+ @property
def unique(self):
return self._unique or self.primary_key
- unique = property(unique)
def set_attributes_from_name(self, name):
- self.name = name
+ if not self.name:
+ self.name = name
self.attname, self.column = self.get_attname_column()
- if self.verbose_name is None and name:
- self.verbose_name = name.replace('_', ' ')
+ if self.verbose_name is None and self.name:
+ self.verbose_name = self.name.replace('_', ' ')
def contribute_to_class(self, cls, name):
self.set_attributes_from_name(name)
Modified: django/trunk/tests/regressiontests/model_fields/models.py
===================================================================
--- django/trunk/tests/regressiontests/model_fields/models.py 2011-08-13
11:53:33 UTC (rev 16613)
+++ django/trunk/tests/regressiontests/model_fields/models.py 2011-08-13
11:53:42 UTC (rev 16614)
@@ -66,6 +66,9 @@
bfield = models.BooleanField()
string = models.CharField(max_length=10, default='abc')
+class RenamedField(models.Model):
+ modelname = models.IntegerField(name="fieldname", choices=((1,'One'),))
+
###############################################################################
# FileField
Modified: django/trunk/tests/regressiontests/model_fields/tests.py
===================================================================
--- django/trunk/tests/regressiontests/model_fields/tests.py 2011-08-13
11:53:33 UTC (rev 16613)
+++ django/trunk/tests/regressiontests/model_fields/tests.py 2011-08-13
11:53:42 UTC (rev 16614)
@@ -8,7 +8,7 @@
from django.db.models.fields.files import FieldFile
from django.utils import unittest
-from models import Foo, Bar, Whiz, BigD, BigS, Image, BigInt, Post,
NullBooleanModel, BooleanModel, Document
+from models import Foo, Bar, Whiz, BigD, BigS, Image, BigInt, Post,
NullBooleanModel, BooleanModel, Document, RenamedField
# If PIL available, do these tests.
if Image:
@@ -53,6 +53,15 @@
f = models.fields.CharField()
self.assertEqual(repr(f), '<django.db.models.fields.CharField>')
+ def test_field_name(self):
+ """
+ Regression test for #14695: explicitly defined field name overwritten
+ by model's attribute name.
+ """
+ instance = RenamedField()
+ self.assertTrue(hasattr(instance, 'get_fieldname_display'))
+ self.assertFalse(hasattr(instance, 'get_modelname_display'))
+
class DecimalFieldTests(test.TestCase):
def test_to_python(self):
f = models.DecimalField(max_digits=4, decimal_places=2)
--
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.