mirror of
https://github.com/Hopiu/django-modeltranslation.git
synced 2026-05-01 18:14:43 +00:00
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:
parent
22cf573724
commit
4ca3c103e5
4 changed files with 50 additions and 7 deletions
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue