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.

Reply via email to