Django

Code

Changeset 5803

Show
Ignore:
Timestamp:
08/05/07 00:14:46 (1 year ago)
Author:
gwilson
Message:

Fixed #2101 -- Renamed maxlength argument to max_length for oldforms FormFields and db model Fields. This is fully backwards compatible at the moment since the legacy maxlength argument is still supported. Using maxlength will, however, issue a PendingDeprecationWarning when used.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/contrib/admin/models.py

    r5609 r5803  
    1919    content_type = models.ForeignKey(ContentType, blank=True, null=True) 
    2020    object_id = models.TextField(_('object id'), blank=True, null=True) 
    21     object_repr = models.CharField(_('object repr'), maxlength=200) 
     21    object_repr = models.CharField(_('object repr'), max_length=200) 
    2222    action_flag = models.PositiveSmallIntegerField(_('action flag')) 
    2323    change_message = models.TextField(_('change message'), blank=True) 
  • django/trunk/django/contrib/admin/templatetags/admin_modify.py

    r5609 r5803  
    193193                     ' var e = document.getElementById("id_%s");' \ 
    194194                     ' if(!e._changed) { e.value = URLify(%s, %s);} }; ' % ( 
    195                      f, field.name, add_values, field.maxlength)) 
     195                     f, field.name, add_values, field.max_length)) 
    196196    return u''.join(t) 
    197197auto_populated_field_script = register.simple_tag(auto_populated_field_script) 
  • django/trunk/django/contrib/admin/views/doc.py

    r5609 r5803  
    292292    'AutoField'                 : _('Integer'), 
    293293    'BooleanField'              : _('Boolean (Either True or False)'), 
    294     'CharField'                 : _('String (up to %(maxlength)s)'), 
     294    'CharField'                 : _('String (up to %(max_length)s)'), 
    295295    'CommaSeparatedIntegerField': _('Comma-separated integers'), 
    296296    'DateField'                 : _('Date (without time)'), 
     
    311311    'PositiveIntegerField'      : _('Integer'), 
    312312    'PositiveSmallIntegerField' : _('Integer'), 
    313     'SlugField'                 : _('String (up to %(maxlength)s)'), 
     313    'SlugField'                 : _('String (up to %(max_length)s)'), 
    314314    'SmallIntegerField'         : _('Integer'), 
    315315    'TextField'                 : _('Text'), 
  • django/trunk/django/contrib/auth/forms.py

    r5609 r5803  
    1111    def __init__(self): 
    1212        self.fields = ( 
    13             oldforms.TextField(field_name='username', length=30, maxlength=30, is_required=True, 
     13            oldforms.TextField(field_name='username', length=30, max_length=30, is_required=True, 
    1414                validator_list=[validators.isAlphaNumeric, self.isValidUsername]), 
    15             oldforms.PasswordField(field_name='password1', length=30, maxlength=60, is_required=True), 
    16             oldforms.PasswordField(field_name='password2', length=30, maxlength=60, is_required=True, 
     15            oldforms.PasswordField(field_name='password1', length=30, max_length=60, is_required=True), 
     16            oldforms.PasswordField(field_name='password2', length=30, max_length=60, is_required=True, 
    1717                validator_list=[validators.AlwaysMatchesOtherField('password1', _("The two password fields didn't match."))]), 
    1818        ) 
     
    4343        self.request = request 
    4444        self.fields = [ 
    45             oldforms.TextField(field_name="username", length=15, maxlength=30, is_required=True, 
     45            oldforms.TextField(field_name="username", length=15, max_length=30, is_required=True, 
    4646                validator_list=[self.isValidUser, self.hasCookiesEnabled]), 
    47             oldforms.PasswordField(field_name="password", length=15, maxlength=30, is_required=True), 
     47            oldforms.PasswordField(field_name="password", length=15, max_length=30, is_required=True), 
    4848        ] 
    4949        self.user_cache = None 
     
    112112        self.user = user 
    113113        self.fields = ( 
    114             oldforms.PasswordField(field_name="old_password", length=30, maxlength=30, is_required=True, 
     114            oldforms.PasswordField(field_name="old_password", length=30, max_length=30, is_required=True, 
    115115                validator_list=[self.isValidOldPassword]), 
    116             oldforms.PasswordField(field_name="new_password1", length=30, maxlength=30, is_required=True, 
     116            oldforms.PasswordField(field_name="new_password1", length=30, max_length=30, is_required=True, 
    117117                validator_list=[validators.AlwaysMatchesOtherField('new_password2', _("The two 'new password' fields didn't match."))]), 
    118             oldforms.PasswordField(field_name="new_password2", length=30, maxlength=30, is_required=True), 
     118            oldforms.PasswordField(field_name="new_password2", length=30, max_length=30, is_required=True), 
    119119        ) 
    120120 
     
    134134        self.user = user 
    135135        self.fields = ( 
    136             oldforms.PasswordField(field_name='password1', length=30, maxlength=60, is_required=True), 
    137             oldforms.PasswordField(field_name='password2', length=30, maxlength=60, is_required=True, 
     136            oldforms.PasswordField(field_name='password1', length=30, max_length=60, is_required=True), 
     137            oldforms.PasswordField(field_name='password2', length=30, max_length=60, is_required=True, 
    138138                validator_list=[validators.AlwaysMatchesOtherField('password1', _("The two password fields didn't match."))]), 
    139139        ) 
  • django/trunk/django/contrib/auth/models.py

    r5771 r5803  
    5151    Three basic permissions -- add, change and delete -- are automatically created for each Django model. 
    5252    """ 
    53     name = models.CharField(_('name'), maxlength=50) 
     53    name = models.CharField(_('name'), max_length=50) 
    5454    content_type = models.ForeignKey(ContentType) 
    55     codename = models.CharField(_('codename'), maxlength=100) 
     55    codename = models.CharField(_('codename'), max_length=100) 
    5656 
    5757    class Meta: 
     
    7171    Beyond permissions, groups are a convenient way to categorize users to apply some label, or extended functionality, to them. For example, you could create a group 'Special users', and you could write code that would do special things to those users -- such as giving them access to a members-only portion of your site, or sending them members-only e-mail messages. 
    7272    """ 
    73     name = models.CharField(_('name'), maxlength=80, unique=True) 
     73    name = models.CharField(_('name'), max_length=80, unique=True) 
    7474    permissions = models.ManyToManyField(Permission, verbose_name=_('permissions'), blank=True, filter_interface=models.HORIZONTAL) 
    7575 
     
    109109    Username and password are required. Other fields are optional. 
    110110    """ 
    111     username = models.CharField(_('username'), maxlength=30, unique=True, validator_list=[validators.isAlphaNumeric], help_text=_("Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores).")) 
    112     first_name = models.CharField(_('first name'), maxlength=30, blank=True) 
    113     last_name = models.CharField(_('last name'), maxlength=30, blank=True) 
     111    username = models.CharField(_('username'), max_length=30, unique=True, validator_list=[validators.isAlphaNumeric], help_text=_("Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores).")) 
     112    first_name = models.CharField(_('first name'), max_length=30, blank=True) 
     113    last_name = models.CharField(_('last name'), max_length=30, blank=True) 
    114114    email = models.EmailField(_('e-mail address'), blank=True) 
    115     password = models.CharField(_('password'), maxlength=128, help_text=_("Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>.")) 
     115    password = models.CharField(_('password'), max_length=128, help_text=_("Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>.")) 
    116116    is_staff = models.BooleanField(_('staff status'), default=False, help_text=_("Designates whether the user can log into this admin site.")) 
    117117    is_active = models.BooleanField(_('active'), default=True, help_text=_("Designates whether this user can log into the Django admin. Unselect this instead of deleting accounts.")) 
  • django/trunk/django/contrib/comments/models.py

    r5609 r5803  
    6666    content_type = models.ForeignKey(ContentType) 
    6767    object_id = models.IntegerField(_('object ID')) 
    68     headline = models.CharField(_('headline'), maxlength=255, blank=True) 
    69     comment = models.TextField(_('comment'), maxlength=3000) 
     68    headline = models.CharField(_('headline'), max_length=255, blank=True) 
     69    comment = models.TextField(_('comment'), max_length=3000) 
    7070    rating1 = models.PositiveSmallIntegerField(_('rating #1'), blank=True, null=True) 
    7171    rating2 = models.PositiveSmallIntegerField(_('rating #2'), blank=True, null=True) 
     
    165165    content_type = models.ForeignKey(ContentType) 
    166166    object_id = models.IntegerField(_('object ID')) 
    167     comment = models.TextField(_('comment'), maxlength=3000) 
    168     person_name = models.CharField(_("person's name"), maxlength=50) 
     167    comment = models.TextField(_('comment'), max_length=3000) 
     168    person_name = models.CharField(_("person's name"), max_length=50) 
    169169    submit_date = models.DateTimeField(_('date/time submitted'), auto_now_add=True) 
    170170    is_public = models.BooleanField(_('is public')) 
  • django/trunk/django/contrib/comments/views/comments.py

    r5609 r5803  
    3030                return [] 
    3131        self.fields.extend([ 
    32             oldforms.LargeTextField(field_name="comment", maxlength=3000, is_required=True, 
     32            oldforms.LargeTextField(field_name="comment", max_length=3000, is_required=True, 
    3333                validator_list=[self.hasNoProfanities]), 
    3434            oldforms.RadioSelectField(field_name="rating1", choices=choices, 
     
    123123    def __init__(self): 
    124124        self.fields = ( 
    125             oldforms.TextField(field_name="person_name", maxlength=50, is_required=True, 
     125            oldforms.TextField(field_name="person_name", max_length=50, is_required=True, 
    126126                validator_list=[self.hasNoProfanities]), 
    127             oldforms.LargeTextField(field_name="comment", maxlength=3000, is_required=True, 
     127            oldforms.LargeTextField(field_name="comment", max_length=3000, is_required=True, 
    128128                validator_list=[self.hasNoProfanities]), 
    129129        ) 
  • django/trunk/django/contrib/contenttypes/models.py

    r5609 r5803  
    3333 
    3434class ContentType(models.Model): 
    35     name = models.CharField(maxlength=100) 
    36     app_label = models.CharField(maxlength=100) 
    37     model = models.CharField(_('python model class name'), maxlength=100) 
     35    name = models.CharField(max_length=100) 
     36    app_label = models.CharField(max_length=100) 
     37    model = models.CharField(_('python model class name'), max_length=100) 
    3838    objects = ContentTypeManager() 
    3939    class Meta: 
  • django/trunk/django/contrib/flatpages/models.py

    r5609 r5803  
    55 
    66class FlatPage(models.Model): 
    7     url = models.CharField(_('URL'), maxlength=100, validator_list=[validators.isAlphaNumericURL], db_index=True, 
     7    url = models.CharField(_('URL'), max_length=100, validator_list=[validators.isAlphaNumericURL], db_index=True, 
    88        help_text=_("Example: '/about/contact/'. Make sure to have leading and trailing slashes.")) 
    9     title = models.CharField(_('title'), maxlength=200) 
     9    title = models.CharField(_('title'), max_length=200) 
    1010    content = models.TextField(_('content')) 
    1111    enable_comments = models.BooleanField(_('enable comments')) 
    12     template_name = models.CharField(_('template name'), maxlength=70, blank=True, 
     12    template_name = models.CharField(_('template name'), max_length=70, blank=True, 
    1313        help_text=_("Example: 'flatpages/contact_page.html'. If this isn't provided, the system will use 'flatpages/default.html'.")) 
    1414    registration_required = models.BooleanField(_('registration required'), help_text=_("If this is checked, only logged-in users will be able to view the page.")) 
  • django/trunk/django/contrib/redirects/models.py

    r5609 r5803  
    55class Redirect(models.Model): 
    66    site = models.ForeignKey(Site, radio_admin=models.VERTICAL) 
    7     old_path = models.CharField(_('redirect from'), maxlength=200, db_index=True, 
     7    old_path = models.CharField(_('redirect from'), max_length=200, db_index=True, 
    88        help_text=_("This should be an absolute path, excluding the domain name. Example: '/events/search/'.")) 
    9     new_path = models.CharField(_('redirect to'), maxlength=200, blank=True, 
     9    new_path = models.CharField(_('redirect to'), max_length=200, blank=True, 
    1010        help_text=_("This can be either an absolute path (as above) or a full URL starting with 'http://'.")) 
    1111 
  • django/trunk/django/contrib/sessions/models.py

    r5609 r5803  
    6666    on the Django website). 
    6767    """ 
    68     session_key = models.CharField(_('session key'), maxlength=40, primary_key=True) 
     68    session_key = models.CharField(_('session key'), max_length=40, primary_key=True) 
    6969    session_data = models.TextField(_('session data')) 
    7070    expire_date = models.DateTimeField(_('expire date')) 
  • django/trunk/django/contrib/sites/models.py

    r5653 r5803  
    1313 
    1414class Site(models.Model): 
    15     domain = models.CharField(_('domain name'), maxlength=100) 
    16     name = models.CharField(_('display name'), maxlength=50) 
     15    domain = models.CharField(_('domain name'), max_length=100) 
     16    name = models.CharField(_('display name'), max_length=50) 
    1717    objects = SiteManager() 
    1818    class Meta: 
  • django/trunk/django/core/management.py

    r5769 r5803  
    911911                    extra_params.update(new_params) 
    912912 
    913                 # Add maxlength for all CharFields. 
     913                # Add max_length for all CharFields. 
    914914                if field_type == 'CharField' and row[3]: 
    915                     extra_params['maxlength'] = row[3] 
     915                    extra_params['max_length'] = row[3] 
    916916 
    917917                if field_type == 'DecimalField': 
     
    988988            if f.name == 'id' and not f.primary_key and opts.pk.name == 'id': 
    989989                e.add(opts, '"%s": You can\'t use "id" as a field name, because each model automatically gets an "id" field if none of the fields have primary_key=True. You need to either remove/rename your "id" field or add primary_key=True to a field.' % f.name) 
    990             if isinstance(f, models.CharField) and f.maxlength in (None, 0): 
    991                 e.add(opts, '"%s": CharFields require a "maxlength" attribute.' % f.name) 
     990            if isinstance(f, models.CharField) and f.max_length in (None, 0): 
     991                e.add(opts, '"%s": CharFields require a "max_length" attribute.' % f.name) 
    992992            if isinstance(f, models.DecimalField): 
    993993                if f.decimal_places is None: 
     
    10141014                e.add(opts, '"%s": "db_index" should be either None, True or False.' % f.name) 
    10151015 
    1016             # Check that maxlength <= 255 if using older MySQL versions. 
     1016            # Check that max_length <= 255 if using older MySQL versions. 
    10171017            if settings.DATABASE_ENGINE == 'mysql': 
    10181018                db_version = connection.get_server_version() 
    1019                 if db_version < (5, 0, 3) and isinstance(f, (models.CharField, models.CommaSeparatedIntegerField, models.SlugField)) and f.maxlength > 255: 
    1020                     e.add(opts, '"%s": %s cannot have a "maxlength" greater than 255 when you are using a version of MySQL prior to 5.0.3 (you are using %s).' % (f.name, f.__class__.__name__, '.'.join([str(n) for n in db_version[:3]]))) 
     1019                if db_version < (5, 0, 3) and isinstance(f, (models.CharField, models.CommaSeparatedIntegerField, models.SlugField)) and f.max_length > 255: 
     1020                    e.add(opts, '"%s": %s cannot have a "max_length" greater than 255 when you are using a version of MySQL prior to 5.0.3 (you are using %s).' % (f.name, f.__class__.__name__, '.'.join([str(n) for n in db_version[:3]]))) 
    10211021 
    10221022            # Check to see if the related field will clash with any 
     
    12531253    fields = ( 
    12541254        # "key" is a reserved word in MySQL, so use "cache_key" instead. 
    1255         models.CharField(name='cache_key', maxlength=255, unique=True, primary_key=True), 
     1255        models.CharField(name='cache_key', max_length=255, unique=True, primary_key=True), 
    12561256        models.TextField(name='value'), 
    12571257        models.DateTimeField(name='expires', db_index=True), 
  • django/trunk/django/db/backends/ado_mssql/creation.py

    r5725 r5803  
    22    'AutoField':         'int IDENTITY (1, 1)', 
    33    'BooleanField':      'bit', 
    4     'CharField':         'varchar(%(maxlength)s)', 
    5     'CommaSeparatedIntegerField': 'varchar(%(maxlength)s)', 
     4    'CharField':         'varchar(%(max_length)s)', 
     5    'CommaSeparatedIntegerField': 'varchar(%(max_length)s)', 
    66    'DateField':         'smalldatetime', 
    77    'DateTimeField':     'smalldatetime', 
     
    1818    'PositiveIntegerField': 'int CONSTRAINT [CK_int_pos_%(column)s] CHECK ([%(column)s] > 0)', 
    1919    'PositiveSmallIntegerField': 'smallint CONSTRAINT [CK_smallint_pos_%(column)s] CHECK ([%(column)s] > 0)', 
    20     'SlugField':         'varchar(%(maxlength)s)', 
     20    'SlugField':         'varchar(%(max_length)s)', 
    2121    'SmallIntegerField': 'smallint', 
    2222    'TextField':         'text', 
  • django/trunk/django/db/backends/mysql/creation.py

    r5725 r5803  
    66    'AutoField':         'integer AUTO_INCREMENT', 
    77    'BooleanField':      'bool', 
    8     'CharField':         'varchar(%(maxlength)s)', 
    9     'CommaSeparatedIntegerField': 'varchar(%(maxlength)s)', 
     8    'CharField':         'varchar(%(max_length)s)', 
     9    'CommaSeparatedIntegerField': 'varchar(%(max_length)s)', 
    1010    'DateField':         'date', 
    1111    'DateTimeField':     'datetime', 
     
    2222    'PositiveIntegerField': 'integer UNSIGNED', 
    2323    'PositiveSmallIntegerField': 'smallint UNSIGNED', 
    24     'SlugField':         'varchar(%(maxlength)s)', 
     24    'SlugField':         'varchar(%(max_length)s)', 
    2525    'SmallIntegerField': 'smallint', 
    2626    'TextField':         'longtext', 
  • django/trunk/django/db/backends/mysql_old/creation.py

    r5725 r5803  
    66    'AutoField':         'integer AUTO_INCREMENT', 
    77    'BooleanField':      'bool', 
    8     'CharField':         'varchar(%(maxlength)s)', 
    9     'CommaSeparatedIntegerField': 'varchar(%(maxlength)s)', 
     8    'CharField':         'varchar(%(max_length)s)', 
     9    'CommaSeparatedIntegerField': 'varchar(%(max_length)s)', 
    1010    'DateField':         'date', 
    1111    'DateTimeField':     'datetime', 
     
    2222    'PositiveIntegerField': 'integer UNSIGNED', 
    2323    'PositiveSmallIntegerField': 'smallint UNSIGNED', 
    24     'SlugField':         'varchar(%(maxlength)s)', 
     24    'SlugField':         'varchar(%(max_length)s)', 
    2525    'SmallIntegerField': 'smallint', 
    2626    'TextField':         'longtext', 
  • django/trunk/django/db/backends/oracle/creation.py

    r5725 r5803  
    99    'AutoField':                    'NUMBER(11)', 
    1010    'BooleanField':                 'NUMBER(1) CHECK (%(column)s IN (0,1))', 
    11     'CharField':                    'NVARCHAR2(%(maxlength)s)', 
    12     'CommaSeparatedIntegerField':   'VARCHAR2(%(maxlength)s)', 
     11    'CharField':                    'NVARCHAR2(%(max_length)s)', 
     12    'CommaSeparatedIntegerField':   'VARCHAR2(%(max_length)s)', 
    1313    'DateField':                    'DATE', 
    1414    'DateTimeField':                'TIMESTAMP', 
  • django/trunk/django/db/backends/postgresql/creation.py

    r5725 r5803  
    66    'AutoField':         'serial', 
    77    'BooleanField':      'boolean', 
    8     'CharField':         'varchar(%(maxlength)s)', 
    9     'CommaSeparatedIntegerField': 'varchar(%(maxlength)s)', 
     8    'CharField':         'varchar(%(max_length)s)', 
     9    'CommaSeparatedIntegerField': 'varchar(%(max_length)s)', 
    1010    'DateField':         'date', 
    1111    'DateTimeField':     'timestamp with time zone', 
     
    2222    'PositiveIntegerField': 'integer CHECK ("%(column)s" >= 0)', 
    2323    'PositiveSmallIntegerField': 'smallint CHECK ("%(column)s" >= 0)', 
    24     'SlugField':         'varchar(%(maxlength)s)', 
     24    'SlugField':         'varchar(%(max_length)s)', 
    2525    'SmallIntegerField': 'smallint', 
    2626    'TextField':         'text', 
  • django/trunk/django/db/backends/sqlite3/creation.py

    r5725 r5803  
    55    'AutoField':                    'integer', 
    66    'BooleanField':                 'bool', 
    7     'CharField':                    'varchar(%(maxlength)s)', 
    8     'CommaSeparatedIntegerField':   'varchar(%(maxlength)s)', 
     7    'CharField':                    'varchar(%(max_length)s)', 
     8    'CommaSeparatedIntegerField':   'varchar(%(max_length)s)', 
    99    'DateField':                    'date', 
    1010    'DateTimeField':                'datetime', 
     
    2121    'PositiveIntegerField':         'integer unsigned', 
    2222    'PositiveSmallIntegerField':    'smallint unsigned', 
    23     'SlugField':                    'varchar(%(maxlength)s)', 
     23    'SlugField':                    'varchar(%(max_length)s)', 
    2424    'SmallIntegerField':            'smallint', 
    2525    'TextField':                    'text', 
  • django/trunk/django/db/backends/sqlite3/introspection.py

    r4265 r5803  
    8282            m = re.search(r'^\s*(?:var)?char\s*\(\s*(\d+)\s*\)\s*$', key) 
    8383            if m: 
    84                 return ('CharField', {'maxlength': int(m.group(1))}) 
     84                return ('CharField', {'max_length': int(m.group(1))}) 
    8585            raise KeyError 
    8686 
  • django/trunk/django/db/models/fields/__init__.py

    r5778 r5803  
    1212from django.utils.translation import ugettext_lazy, ugettext as _ 
    1313from django.utils.encoding import smart_unicode, force_unicode, smart_str 
     14from django.utils.maxlength import LegacyMaxlength 
    1415import datetime, os, time 
    1516try: 
     
    6465 
    6566class Field(object): 
     67    # Provide backwards compatibility for the maxlength attribute and 
     68    # argument for this class and all subclasses. 
     69    __metaclass__ = LegacyMaxlength 
    6670 
    6771    # Designates whether empty strings fundamentally are allowed at the 
     
    7377 
    7478    def __init__(self, verbose_name=None, name=None, primary_key=False, 
    75         maxlength=None, unique=False, blank=False, null=False, db_index=False, 
     79        max_length=None, unique=False, blank=False, null=False, db_index=False, 
    7680        core=False, rel=None, default=NOT_PROVIDED, editable=True, serialize=True, 
    7781        prepopulate_from=None, unique_for_date=None, unique_for_month=None, 
     
    8185        self.verbose_name = verbose_name 
    8286        self.primary_key = primary_key 
    83         self.maxlength, self.unique = maxlength, unique 
     87        self.max_length, self.unique = max_length, unique 
    8488        self.blank, self.null = blank, null 
    8589        # Oracle treats the empty string ('') as null, so coerce the null 
     
    245249    def prepare_field_objs_and_params(self, manipulator, name_prefix): 
    246250        params = {'validator_list': self.validator_list[:]} 
    247         if self.maxlength and not self.choices: # Don't give SelectFields a maxlength parameter. 
    248             params['maxlength'] = self.maxlength 
     251        if self.max_length and not self.choices: # Don't give SelectFields a max_length parameter. 
     252            params['max_length'] = self.max_length 
    249253 
    250254        if self.choices: 
     
    462466 
    463467    def formfield(self, **kwargs): 
    464         defaults = {'max_length': self.maxlength} 
     468        defaults = {'max_length': self.max_length} 
    465469        defaults.update(kwargs) 
    466470        return super(CharField, self).formfield(**defaults) 
     
    671675class EmailField(CharField): 
    672676    def __init__(self, *args, **kwargs): 
    673         kwargs['maxlength'] = 75 
     677        kwargs['max_length'] = 75 
    674678        CharField.__init__(self, *args, **kwargs) 
    675679 
     
    830834    empty_strings_allowed = False 
    831835    def __init__(self, *args, **kwargs): 
    832         kwargs['maxlength'] = 15 
     836        kwargs['max_length'] = 15 
    833837        Field.__init__(self, *args, **kwargs) 
    834838 
     
    878882class SlugField(Field): 
    879883    def __init__(self, *args, **kwargs): 
    880         kwargs['maxlength'] = kwargs.get('maxlength', 50) 
     884        kwargs['max_length'] = kwargs.get('max_length', 50) 
    881885        kwargs.setdefault('validator_list', []).append(validators.isSlug) 
    882886        # Set db_index=True unless it's been set manually. 
     
    964968class URLField(CharField): 
    965969    def __init__(self, verbose_name=None, name=None, verify_exists=True, **kwargs): 
    966         kwargs['maxlength'] = kwargs.get('maxlength', 200) 
     970        kwargs['max_length'] = kwargs.get('max_length', 200) 
    967971        if verify_exists: 
    968972            kwargs.setdefault('validator_list', []).append(validators.isExistingURL) 
  • django/trunk/django/newforms/fields.py

    r5695 r5803  
    121121    def widget_attrs(self, widget): 
    122122        if self.max_length is not None and isinstance(widget, (TextInput, PasswordInput)): 
     123            # The HTML attribute is maxlength, not max_length. 
    123124            return {'maxlength': str(self.max_length)} 
    124125 
  • django/trunk/django/oldforms/__init__.py

    r5642 r5803  
    55from django.utils.translation import ugettext, ungettext 
    66from django.utils.encoding import smart_unicode, force_unicode 
     7from django.utils.maxlength import LegacyMaxlength 
    78 
    89FORM_FIELD_ID_PREFIX = 'id_' 
     
    303304    for rending the form field in XHTML. 
    304305    """ 
     306    # Provide backwards compatibility for the maxlength attribute and 
     307    # argument for this class and all subclasses. 
     308    __metaclass__ = LegacyMaxlength 
    305309 
    306310    def __str__(self): 
     
    391395class TextField(FormField): 
    392396    input_type = "text" 
    393     def __init__(self, field_name, length=30, maxlength=None, is_required=False, validator_list=None, member_name=None): 
     397    def __init__(self, field_name, length=30, max_length=None, is_required=False, validator_list=None, member_name=None): 
    394398        if validator_list is None: validator_list = [] 
    395399        self.field_name = field_name 
    396         self.length, self.maxlength = length, maxlength 
     400        self.length, self.max_length = length, max_length 
    397401        self.is_required = is_required 
    398402        self.validator_list = [self.isValidLength, self.hasNoNewlines] + validator_list 
     
    401405 
    402406    def isValidLength(self, data, form): 
    403         if data and self.maxlength and len(smart_unicode(data)) > self.maxlength: 
     407        if data and self.max_length and len(smart_unicode(data)) > self.max_length: 
    404408            raise validators.ValidationError, ungettext("Ensure your text is less than %s character.", 
    405                 "Ensure your text is less than %s characters.", self.maxlength) % self.maxlength 
     409                "Ensure your text is less than %s characters.", self.max_length) % self.max_length 
    406410 
    407411    def hasNoNewlines(self, data, form): 
     
    412416        if data is None: 
    413417            data = u'' 
    414         maxlength = u'' 
    415         if self.maxlength: 
    416             maxlength = u'maxlength="%s" ' % self.maxlength 
     418        max_length = u'' 
     419        if self.max_length: 
     420            max_length = u'maxlength="%s" ' % self.max_length 
    417421        return u'<input type="%s" id="%s" class="v%s%s" name="%s" size="%s" value="%s" %s/>' % \ 
    418422            (self.input_type, self.get_id(), self.__class__.__name__, self.is_required and u' required' or '', 
    419             self.field_name, self.length, escape(data), maxlength) 
     423            self.field_name, self.length, escape(data), max_length) 
    420424 
    421425    def html2python(data): 
     
    427431 
    428432class LargeTextField(TextField): 
    429     def __init__(self, field_name, rows=10, cols=40, is_required=False, validator_list=None, maxlength=None): 
     433    def __init__(self, field_name, rows=10, cols=40, is_required=False, validator_list=None, max_length=None): 
    430434        if validator_list is None: validator_list = [] 
    431435        self.field_name = field_name 
    432436        self.rows, self.cols, self.is_required = rows, cols, is_required 
    433437        self.validator_list = validator_list[:] 
    434         if maxlength: 
     438        if max_length: 
    435439            self.validator_list.append(self.isValidLength) 
    436             self.maxlength = maxlength 
     440            self.max_length = max_length 
    437441 
    438442    def render(self, data): 
     
    711715 
    712716class IntegerField(TextField): 
    713     def __init__(self, field_name, length=10, maxlength=None, is_required=False, validator_list=None, member_name=None): 
     717    def __init__(self, field_name, length=10, max_length=None, is_required=False, validator_list=None, member_name=None): 
    714718        if validator_list is None: validator_list = [] 
    715719        validato