From e04073a7ec1577740dfb1189eba519b1d1d84174 Mon Sep 17 00:00:00 2001 From: Jacek Tomaszewski Date: Sun, 7 Apr 2013 15:31:07 +0200 Subject: [PATCH] Preserve default fields order in group_fieldsets. --- modeltranslation/admin.py | 13 ++++++++++--- modeltranslation/tests/__init__.py | 4 ++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/modeltranslation/admin.py b/modeltranslation/admin.py index 9d29235..bc02163 100644 --- a/modeltranslation/admin.py +++ b/modeltranslation/admin.py @@ -12,7 +12,7 @@ import modeltranslation.models # NOQA from modeltranslation.settings import DEFAULT_LANGUAGE from modeltranslation.translator import translator from modeltranslation.utils import ( - get_translation_fields, build_css_class, build_localized_fieldname, get_language) + get_translation_fields, build_css_class, build_localized_fieldname, get_language, unique) class TranslationBaseModelAdmin(BaseModelAdmin): @@ -251,6 +251,7 @@ class TranslationAdmin(TranslationBaseModelAdmin, admin.ModelAdmin): # TODO: Allow setting a label fieldsets = [('', {'fields': untranslated_fields},)] if untranslated_fields else [] + temp_fieldsets = {} for orig_field, trans_fields in self.trans_opts.fields.items(): trans_fieldnames = [f.name for f in sorted(trans_fields, key=lambda x: x.name)] if any(f in trans_fieldnames for f in flattened_fieldsets): @@ -258,10 +259,16 @@ class TranslationAdmin(TranslationBaseModelAdmin, admin.ModelAdmin): # fieldset's label - using ugettext_lazy in your model # declaration can make that translatable. label = self.model._meta.get_field(orig_field).verbose_name - fieldsets.append((label, { + temp_fieldsets[orig_field] = (label, { 'fields': trans_fieldnames, 'classes': ('mt-fieldset',) - })) + }) + + fields_order = unique(f.translated_field.name for f in self.opts.fields if + hasattr(f, 'translated_field') and f.name in flattened_fieldsets) + for field_name in fields_order: + fieldsets.append(temp_fieldsets.pop(field_name)) + assert not temp_fieldsets # cleaned return fieldsets diff --git a/modeltranslation/tests/__init__.py b/modeltranslation/tests/__init__.py index e44fd24..2dc6b9f 100644 --- a/modeltranslation/tests/__init__.py +++ b/modeltranslation/tests/__init__.py @@ -1921,8 +1921,8 @@ class TranslationAdminTest(ModeltranslationTestBase): # (email only) and one for each translation field (text and title). fieldsets = [ ('', {'fields': ['email']}), + ('title', {'classes': ('mt-fieldset',), 'fields': ['title_de', 'title_en']}), ('text', {'classes': ('mt-fieldset',), 'fields': ['text_de', 'text_en']}), - ('title', {'classes': ('mt-fieldset',), 'fields': ['title_de', 'title_en']}) ] self.assertEqual(ma.get_fieldsets(request), fieldsets) self.assertEqual(ma.get_fieldsets(request, self.test_obj), fieldsets) @@ -1935,8 +1935,8 @@ class TranslationAdminTest(ModeltranslationTestBase): exclude = ('email',) ma = GroupFieldsetsModelAdmin(models.GroupFieldsetsModel, self.site) fieldsets = [ + ('title', {'classes': ('mt-fieldset',), 'fields': ['title_de', 'title_en']}), ('text', {'classes': ('mt-fieldset',), 'fields': ['text_de', 'text_en']}), - ('title', {'classes': ('mt-fieldset',), 'fields': ['title_de', 'title_en']}) ] self.assertEqual(ma.get_fieldsets(request), fieldsets) self.assertEqual(ma.get_fieldsets(request, self.test_obj), fieldsets)