diff options
Diffstat (limited to 'django')
| -rw-r--r-- | django/contrib/admin/helpers.py | 24 | ||||
| -rw-r--r-- | django/contrib/admin/views/main.py | 2 | ||||
| -rw-r--r-- | django/forms/models.py | 2 |
3 files changed, 25 insertions, 3 deletions
diff --git a/django/contrib/admin/helpers.py b/django/contrib/admin/helpers.py index 5cb8f1f07b..9312eab94f 100644 --- a/django/contrib/admin/helpers.py +++ b/django/contrib/admin/helpers.py @@ -17,7 +17,7 @@ checkbox = forms.CheckboxInput({'class': 'action-select'}, lambda value: False) class AdminForm(object): def __init__(self, form, fieldsets, prepopulated_fields): - self.form, self.fieldsets = form, fieldsets + self.form, self.fieldsets = form, normalize_fieldsets(fieldsets) self.prepopulated_fields = [{ 'field': form[field_name], 'dependencies': [form[f] for f in dependencies] @@ -196,3 +196,25 @@ class AdminErrorList(forms.util.ErrorList): self.extend(inline_formset.non_form_errors()) for errors_in_inline_form in inline_formset.errors: self.extend(errors_in_inline_form.values()) + +def normalize_fieldsets(fieldsets): + """ + Make sure the keys in fieldset dictionaries are strings. Returns the + normalized data. + """ + result = [] + for name, options in fieldsets: + result.append((name, normalize_dictionary(options))) + return result + +def normalize_dictionary(data_dict): + """ + Converts all the keys in "data_dict" to strings. The keys must be + convertible using str(). + """ + for key, value in data_dict.items(): + if not isinstance(key, str): + del data_dict[key] + data_dict[str(key)] = value + return data_dict + diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py index 9580e912a4..49b18ebdfd 100644 --- a/django/contrib/admin/views/main.py +++ b/django/contrib/admin/views/main.py @@ -228,7 +228,7 @@ class ChangeList(object): if self.search_fields and self.query: for bit in self.query.split(): - or_queries = [models.Q(**{construct_search(field_name): bit}) for field_name in self.search_fields] + or_queries = [models.Q(**{construct_search(str(field_name)): bit}) for field_name in self.search_fields] other_qs = QuerySet(self.model) other_qs.dup_select_related(qs) other_qs = other_qs.filter(reduce(operator.or_, or_queries)) diff --git a/django/forms/models.py b/django/forms/models.py index 8d55e4459e..010d3bf61c 100644 --- a/django/forms/models.py +++ b/django/forms/models.py @@ -276,7 +276,7 @@ class BaseModelForm(BaseForm): # using it in a lookup. if isinstance(self.fields[field_name], ModelChoiceField): lookup_value = lookup_value.pk - lookup_kwargs[field_name] = lookup_value + lookup_kwargs[str(field_name)] = lookup_value qs = self.instance.__class__._default_manager.filter(**lookup_kwargs) |
