Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixed #7880 -- Corrected the handling of fields in the admin that spe…

…cify 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.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@8153 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit f7d123a731e62af9a792623812bef632f3142547 1 parent a98d12b
Russell Keith-Magee freakboy3742 authored
Showing with 17 additions and 9 deletions.
  1. +17 −9 django/contrib/admin/options.py
26 django/contrib/admin/options.py
View
@@ -129,6 +129,23 @@ def formfield_for_dbfield(self, db_field, **kwargs):
If kwargs are given, they're passed to the form Field's constructor.
"""
+
+ # If the field specifies choices, we don't need to look for special
+ # admin widgets - we just need to use a select widget of some kind.
+ if db_field.choices:
+ if db_field.name in self.radio_fields:
+ # If the field is named as a radio_field, use a RadioSelect
+ kwargs['widget'] = widgets.AdminRadioSelect(
+ choices=db_field.get_choices(include_blank=db_field.blank,
+ blank_choice=[('', _('None'))]),
+ attrs={
+ 'class': get_ul_class(self.radio_fields[db_field.name]),
+ }
+ )
+ else:
+ # Otherwise, use the default select widget.
+ return db_field.formfield(**kwargs)
+
# For DateTimeFields, use a special field and widget.
if isinstance(db_field, models.DateTimeField):
kwargs['form_class'] = forms.SplitDateTimeField
@@ -176,15 +193,6 @@ def formfield_for_dbfield(self, db_field, **kwargs):
if not db_field.name in self.raw_id_fields:
formfield.widget = widgets.RelatedFieldWidgetWrapper(formfield.widget, db_field.rel, self.admin_site)
return formfield
-
- if db_field.choices and db_field.name in self.radio_fields:
- kwargs['widget'] = widgets.AdminRadioSelect(
- choices=db_field.get_choices(include_blank=db_field.blank,
- blank_choice=[('', _('None'))]),
- attrs={
- 'class': get_ul_class(self.radio_fields[db_field.name]),
- }
- )
# For any other type of field, just call its formfield() method.
return db_field.formfield(**kwargs)
Please sign in to comment.
Something went wrong with that request. Please try again.