From 39262a8a02ea35c38d0c1a45c21c8db1c8b61fb9 Mon Sep 17 00:00:00 2001 From: Dirk Eschler Date: Sun, 10 Apr 2011 20:27:24 +0000 Subject: [PATCH] Fixed a bug in the admin integration where an emptied default language field (which has been defined with "blank=True") hasn't cleared the default field. Resolves issue 47. --- modeltranslation/admin.py | 16 +++++++++++++++- modeltranslation/utils.py | 2 +- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/modeltranslation/admin.py b/modeltranslation/admin.py index 0e33a97..4e6a971 100644 --- a/modeltranslation/admin.py +++ b/modeltranslation/admin.py @@ -8,7 +8,7 @@ from django.contrib.contenttypes import generic from modeltranslation.settings import * from modeltranslation.translator import translator -from modeltranslation.utils import get_translation_fields +from modeltranslation.utils import get_translation_fields, build_localized_fieldname # Ensure that models are registered for translation before TranslationAdmin # runs. The import is supposed to resolve a race condition between model import # and translation registration in production (see issue 19). @@ -112,6 +112,20 @@ class TranslationAdmin(admin.ModelAdmin, TranslationAdminBase): prepopulated_fields_new[k] = tuple([translation_fields[0]]) self.prepopulated_fields = prepopulated_fields_new + def save_model(self, request, obj, form, change): + # Rule is: 3. Assigning a value to a translation field of the default language also + # updates the original field. + # Ensure that an empty default language field value clears the default field. + # See issue 47 for details. + trans_opts = translator.get_options_for_model(self.model) + for k, v in trans_opts.localized_fieldnames.items(): + if getattr(obj, k): + default_lang_fieldname = build_localized_fieldname(k, DEFAULT_LANGUAGE) + if not getattr(obj, default_lang_fieldname): + # TODO: Handle null values + setattr(obj, k, "") + super(TranslationAdmin, self).save_model(request, obj, form, change) + def formfield_for_dbfield(self, db_field, **kwargs): # Call the baseclass function to get the formfield field = super(TranslationAdmin, self).formfield_for_dbfield(db_field, diff --git a/modeltranslation/utils.py b/modeltranslation/utils.py index 41e1502..cd9e1a2 100644 --- a/modeltranslation/utils.py +++ b/modeltranslation/utils.py @@ -19,7 +19,7 @@ def get_language(): lang = lang.split('-')[0] if lang in AVAILABLE_LANGUAGES: return lang - return AVAILABLE_LANGUAGES[0] + return DEFAULT_LANGUAGE def get_translation_fields(field):