From ee380ec7b797df8254de84be66a7687978d968b1 Mon Sep 17 00:00:00 2001 From: Dirk Eschler Date: Tue, 20 Nov 2012 01:02:12 +0100 Subject: [PATCH] Handled nested lists to display multiple fields on same line by flatting them. --- modeltranslation/admin.py | 19 +++++++++++++++++-- modeltranslation/tests/__init__.py | 10 ++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/modeltranslation/admin.py b/modeltranslation/admin.py index 2679563..d06b632 100644 --- a/modeltranslation/admin.py +++ b/modeltranslation/admin.py @@ -101,8 +101,20 @@ class TranslationBaseModelAdmin(BaseModelAdmin): ['title_de', 'title_en'] >>> self.replace_orig_field(['title', 'url']) ['title_de', 'title_en', 'url'] + + Note that grouped fields are flattened. We do this because: + + 1. They are hard to handle in the jquery-ui tabs implementation + 2. They don't scale well with more than a few languages + 3. It's better than not handling them at all (okay that's weak) + + >>> print self.trans_opts.fields + (('title', 'url'), 'email') + >>> get_translation_fields(self.trans_opts.fields[0]) + ['title_de', 'title_en', 'url_de', 'url_en', 'email_de', 'email_en'] + >>> self.replace_orig_field((('title', 'url'), 'email', 'text')) + ['title_de', 'title_en', 'url_de', 'url_en', 'email_de', 'email_en', 'text'] """ - # TODO: Handle nested lists to display multiple fields on same line. if option: option_new = list(option) for opt in option: @@ -110,11 +122,14 @@ class TranslationBaseModelAdmin(BaseModelAdmin): index = option_new.index(opt) translation_fields = get_translation_fields(opt) option_new[index:index + 1] = translation_fields + elif isinstance(opt, (tuple, list)) and ( + [o for o in opt if o in self.trans_opts.fields]): + index = option_new.index(opt) + option_new[index:index + 1] = self.replace_orig_field(opt) option = option_new return option def _patch_fieldsets(self, fieldsets): - # TODO: Handle nested lists to display multiple fields on same line. if fieldsets: fieldsets_new = list(fieldsets) for (name, dct) in fieldsets: diff --git a/modeltranslation/tests/__init__.py b/modeltranslation/tests/__init__.py index fd85ddf..7b92454 100644 --- a/modeltranslation/tests/__init__.py +++ b/modeltranslation/tests/__init__.py @@ -1424,6 +1424,16 @@ class TranslationAdminTest(ModeltranslationTestBase): self.assertEqual( ma.get_form(request).base_fields.keys(), ['title_de', 'title_en']) + # Using grouped fields. + class TestModelAdmin(TranslationAdmin): + fields = (('title', 'url'), 'email',) + + ma = TestModelAdmin(TestModel, self.site) + # Note: Current implementation flattens the nested fields + self.assertEqual( + ma.get_form(request).base_fields.keys(), + ['title_de', 'title_en', 'url_de', 'url_en', 'email_de', 'email_en']) + def test_field_arguments_restricted_on_custom_form(self): # Using `fields`. class TestModelForm(forms.ModelForm):