Fixed prepopulated fields only work on the first defined field and made function aware of the current language. Added a unittest to verify. Resolves issue #57.

This commit is contained in:
Dirk Eschler 2013-02-12 15:53:00 +01:00
parent 22cf573724
commit 4ca3c103e5
4 changed files with 50 additions and 7 deletions

View file

@ -11,7 +11,8 @@ from django.contrib.contenttypes import generic
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
from modeltranslation.utils import (
get_translation_fields, build_css_class, build_localized_fieldname, get_language)
class TranslationBaseModelAdmin(BaseModelAdmin):
@ -129,11 +130,15 @@ class TranslationBaseModelAdmin(BaseModelAdmin):
def _patch_prepopulated_fields(self):
if self.prepopulated_fields:
# TODO: Perhaps allow to configure which language the slug should be based on?
lang = get_language()
prepopulated_fields_new = dict(self.prepopulated_fields)
for (k, v) in self.prepopulated_fields.items():
if v[0] in self.trans_opts.fields:
translation_fields = get_translation_fields(v[0])
prepopulated_fields_new[k] = tuple([translation_fields[0]])
translation_fields = []
for k, v in self.prepopulated_fields.items():
for i in v:
if i in self.trans_opts.fields.keys():
translation_fields.append(build_localized_fieldname(i, lang))
prepopulated_fields_new[k] = tuple(translation_fields)
self.prepopulated_fields = prepopulated_fields_new
def _do_get_form_or_formset(self, request, obj, **kwargs):

View file

@ -227,7 +227,7 @@ class ModeltranslationTest(ModeltranslationTestBase):
self.failUnless(translator.translator)
# Check that all models are registered for translation
self.assertEqual(len(translator.translator.get_registered_models()), 20)
self.assertEqual(len(translator.translator.get_registered_models()), 21)
# Try to unregister a model that is not registered
self.assertRaises(translator.NotRegistered,
@ -1615,6 +1615,33 @@ class TranslationAdminTest(ModeltranslationTestBase):
self.assertEqual(ma.get_fieldsets(request), fieldsets)
self.assertEqual(ma.get_fieldsets(request, self.test_obj), fieldsets)
def test_prepopulated_fields(self):
trans_real.activate('de')
self.failUnlessEqual(get_language(), 'de')
class NameModelAdmin(admin.TranslationAdmin):
prepopulated_fields = {'slug': ('firstname',)}
ma = NameModelAdmin(models.NameModel, self.site)
self.assertEqual(ma.prepopulated_fields, {'slug': ('firstname_de',)})
class NameModelAdmin(admin.TranslationAdmin):
prepopulated_fields = {'slug': ('firstname', 'lastname',)}
ma = NameModelAdmin(models.NameModel, self.site)
self.assertEqual(ma.prepopulated_fields, {'slug': ('firstname_de', 'lastname_de',)})
trans_real.activate('en')
self.failUnlessEqual(get_language(), 'en')
class NameModelAdmin(admin.TranslationAdmin):
prepopulated_fields = {'slug': ('firstname',)}
ma = NameModelAdmin(models.NameModel, self.site)
self.assertEqual(ma.prepopulated_fields, {'slug': ('firstname_en',)})
class NameModelAdmin(admin.TranslationAdmin):
prepopulated_fields = {'slug': ('firstname', 'lastname',)}
ma = NameModelAdmin(models.NameModel, self.site)
self.assertEqual(ma.prepopulated_fields, {'slug': ('firstname_en', 'lastname_en',)})
class TestManager(ModeltranslationTestBase):
def setUp(self):

View file

@ -140,6 +140,12 @@ class GroupFieldsetsModel(models.Model):
email = models.EmailField(blank=True, null=True)
class NameModel(models.Model):
firstname = models.CharField(max_length=50)
lastname = models.CharField(max_length=50)
slug = models.SlugField(max_length=100)
########## Manager testing
class ManagerTestModel(models.Model):

View file

@ -6,7 +6,7 @@ from modeltranslation.tests.models import (
TestModel, FallbackModel, FallbackModel2, FileFieldsModel, OtherFieldsModel, AbstractModelA,
AbstractModelB, Slugged, MetaData, Displayable, Page, RichText, RichTextPage,
MultitableModelA, MultitableModelB, MultitableModelC, ManagerTestModel, CustomManagerTestModel,
CustomManager2TestModel, GroupFieldsetsModel)
CustomManager2TestModel, GroupFieldsetsModel, NameModel)
class TestTranslationOptions(TranslationOptions):
@ -142,3 +142,8 @@ class FieldInheritanceETranslationOptions(FieldInheritanceCTranslationOptions,
class GroupFieldsetsTranslationOptions(TranslationOptions):
fields = ('title', 'text',)
translator.register(GroupFieldsetsModel, GroupFieldsetsTranslationOptions)
class NameTranslationOptions(TranslationOptions):
fields = ('firstname', 'lastname',)
translator.register(NameModel, NameTranslationOptions)