Django

Code

Changeset 8153

Show
Ignore:
Timestamp:
07/30/08 06:41:04 (5 months ago)
Author:
russellm
Message:

Fixed #7880 -- Corrected the handling of fields in the admin that specify choices, so that the presence of choices overrides the decision to use a custom admin widget. This is primarily of interest to Date/Time fields. Thanks to camilonova for the report.

Files:

Legend:

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

    r8144 r8153  
    130130        If kwargs are given, they're passed to the form Field's constructor. 
    131131        """ 
     132     
     133        # If the field specifies choices, we don't need to look for special 
     134        # admin widgets - we just need to use a select widget of some kind. 
     135        if db_field.choices: 
     136            if db_field.name in self.radio_fields: 
     137                # If the field is named as a radio_field, use a RadioSelect 
     138                kwargs['widget'] = widgets.AdminRadioSelect( 
     139                    choices=db_field.get_choices(include_blank=db_field.blank, 
     140                        blank_choice=[('', _('None'))]), 
     141                    attrs={ 
     142                        'class': get_ul_class(self.radio_fields[db_field.name]), 
     143                    } 
     144                ) 
     145            else: 
     146                # Otherwise, use the default select widget. 
     147                return db_field.formfield(**kwargs) 
     148         
    132149        # For DateTimeFields, use a special field and widget. 
    133150        if isinstance(db_field, models.DateTimeField): 
     
    177194                formfield.widget = widgets.RelatedFieldWidgetWrapper(formfield.widget, db_field.rel, self.admin_site) 
    178195            return formfield 
    179          
    180         if db_field.choices and db_field.name in self.radio_fields: 
    181             kwargs['widget'] = widgets.AdminRadioSelect( 
    182                 choices=db_field.get_choices(include_blank=db_field.blank, 
    183                     blank_choice=[('', _('None'))]), 
    184                 attrs={ 
    185                     'class': get_ul_class(self.radio_fields[db_field.name]), 
    186                 } 
    187             ) 
    188196 
    189197        # For any other type of field, just call its formfield() method.