Commit 1abafe69 authored by Jannis Leidel's avatar Jannis Leidel
Browse files

Fixed #14695 -- Stopped model fields from incorrectly overwriting the field...

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.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16614 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent c0a4c04e
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -220,15 +220,16 @@ class Field(object):
        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):
        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)
+3 −0
Original line number Diff line number Diff line
@@ -66,6 +66,9 @@ class BooleanModel(models.Model):
    bfield = models.BooleanField()
    string = models.CharField(max_length=10, default='abc')

class RenamedField(models.Model):
    modelname = models.IntegerField(name="fieldname", choices=((1,'One'),))

###############################################################################
# FileField

+10 −1
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@ from django.db import models
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 @@ class BasicFieldTests(test.TestCase):
        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)