mirror of
https://github.com/Hopiu/django-modeltranslation.git
synced 2026-05-15 08:23:09 +00:00
Preserve default fields order in group_fieldsets.
This commit is contained in:
parent
b7ea1fac4c
commit
e04073a7ec
2 changed files with 12 additions and 5 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue