Example #1
0
    def test_language_code_enforcing(self):
        'With language_code enforcing, language should be set automatically'
        Form = translatable_modelform_factory('ja', Normal, form=NormalForm)
        data = {
            'shared_field': 'shared',
            'translated_field': 'Japanese',
        }
        form = Form(data)
        self.assertTrue(form.is_valid(), form.errors.as_text())
        self.assertCountEqual(
            form.cleaned_data,
            ['shared_field', 'translated_field', 'language_code'])
        self.assertEqual(form.cleaned_data['language_code'], 'ja')

        data = {
            'shared_field': 'shared',
            'translated_field': 'Japanese',
            'language_code': 'sr',
        }
        Form = translatable_modelform_factory('ja', Normal, form=NormalForm)
        form = Form(data)
        self.assertTrue(form.is_valid(), form.errors.as_text())
        self.assertCountEqual(
            form.cleaned_data,
            ['shared_field', 'translated_field', 'language_code'])
        self.assertEqual(form.cleaned_data['language_code'], 'ja')
Example #2
0
    def test_instance_wrong_translation(self):
        # no language enforced
        form = NormalForm(instance=Normal.objects.language('en').get(
            pk=self.normal_id[1]))
        self.assertFalse(form.is_valid())
        self.assertCountEqual(form.initial,
                              ['shared_field', 'translated_field'])
        self.assertEqual(form.initial['shared_field'], NORMAL[1].shared_field)
        self.assertEqual(form.initial['translated_field'],
                         NORMAL[1].translated_field['en'])
        self.assertIn('value="%s"' % NORMAL[1].shared_field, form.as_p())
        self.assertIn('value="%s"' % NORMAL[1].translated_field['en'],
                      form.as_p())
        self.assertEqual(
            get_cached_translation(form.instance).language_code, 'en')

        # enforce japanese language
        Form = translatable_modelform_factory('ja', Normal, form=NormalForm)
        form = Form(instance=Normal.objects.language('en').get(
            pk=self.normal_id[1]))
        self.assertFalse(form.is_valid())
        self.assertCountEqual(form.initial,
                              ['shared_field', 'translated_field'])
        self.assertEqual(form.initial['shared_field'], NORMAL[1].shared_field)
        self.assertEqual(form.initial['translated_field'],
                         NORMAL[1].translated_field['ja'])
        self.assertIn('value="%s"' % NORMAL[1].shared_field, form.as_p())
        self.assertIn('value="%s"' % NORMAL[1].translated_field['ja'],
                      form.as_p())
        self.assertEqual(
            get_cached_translation(form.instance).language_code, 'en')
Example #3
0
 def get_form(self, request, obj=None, **kwargs):
     """
     Returns a Form class for use in the admin add view. This is used by
     add_view and change_view.
     """
     if self.declared_fieldsets:
         fields = flatten_fieldsets(self.declared_fieldsets)
     else:
         fields = None
     if self.exclude is None:
         exclude = []
     else:
         exclude = list(self.exclude)
     exclude.extend(kwargs.get("exclude", []))
     exclude.extend(self.get_readonly_fields(request, obj))
     # Exclude language_code, adding it again to the instance is done by
     # the LanguageAwareCleanMixin (see translatable_modelform_factory)
     exclude.append('language_code')
     old_formfield_callback = curry(self.formfield_for_dbfield,
                                    request=request)
     defaults = {
         "form": self.form,
         "fields": fields,
         "exclude": exclude,
         "formfield_callback": old_formfield_callback,
     }
     defaults.update(kwargs)
     language = self._language(request)
     return translatable_modelform_factory(language, self.model, **defaults)
Example #4
0
 def test_set_fields_before_save(self):
     'Manually set some translated fields before calling save()'
     Form = translatable_modelform_factory('sr',
                                           Normal,
                                           form=NormalForm,
                                           exclude=['translated_field'])
     data = {
         'shared_field': 'shared',
     }
     with translation.override('en'):
         form = Form(data,
                     instance=Normal.objects.language('ja').get(
                         pk=self.normal_id[1]))
         with self.assertNumQueries(1):
             self.assertTrue(form.is_valid())
         form.instance.translated_field = u'ћирилица'
         with self.assertNumQueries(2 if django.VERSION >= (1, 6) else 3):
             obj = form.save()
         with self.assertNumQueries(0):
             self.assertEqual(obj.pk, self.normal_id[1])
             self.assertEqual(obj.language_code, 'sr')
             self.assertEqual(obj.shared_field, 'shared')
             self.assertEqual(obj.translated_field, u'ћирилица')
         self.assertEqual(
             Normal.objects.language('sr').get(
                 pk=self.normal_id[1]).translated_field, u'ћирилица')
Example #5
0
    def test_instance(self):
        # no language enforced
        with self.assertNumQueries(1):
            form = NormalForm(instance=Normal.objects.language('ja').get(
                pk=self.normal_id[1]))
        self.assertFalse(form.is_valid())
        self.assertCountEqual(form.initial,
                              ['shared_field', 'translated_field'])
        self.assertEqual(form.initial['shared_field'], NORMAL[1].shared_field)
        self.assertEqual(form.initial['translated_field'],
                         NORMAL[1].translated_field['ja'])
        self.assertIn('value="%s"' % NORMAL[1].shared_field, form.as_p())
        self.assertIn('value="%s"' % NORMAL[1].translated_field['ja'],
                      form.as_p())
        self.assertEqual(form.instance.language_code, 'ja')

        # enforce japanese language
        with self.assertNumQueries(1):
            Form = translatable_modelform_factory('ja',
                                                  Normal,
                                                  form=NormalForm)
            form = Form(instance=Normal.objects.language('ja').get(
                pk=self.normal_id[1]))
        self.assertFalse(form.is_valid())
        self.assertCountEqual(form.initial,
                              ['shared_field', 'translated_field'])
        self.assertEqual(form.initial['shared_field'], NORMAL[1].shared_field)
        self.assertEqual(form.initial['translated_field'],
                         NORMAL[1].translated_field['ja'])
        self.assertIn('value="%s"' % NORMAL[1].shared_field, form.as_p())
        self.assertIn('value="%s"' % NORMAL[1].translated_field['ja'],
                      form.as_p())
        self.assertEqual(form.instance.language_code, 'ja')
Example #6
0
    def get_form(self, request, obj=None, **kwargs):
        """
        Returns a Form class for use in the admin add view. This is used by
        add_view and change_view.
        """
        if 'fields' in kwargs:
            fields = kwargs.pop('fields')
        else:
            fields = flatten_fieldsets(self.get_fieldsets(request, obj))
        exclude = (tuple(self.exclude or ()) + tuple(kwargs.pop("exclude",
                                                                ())) +
                   tuple(self.get_readonly_fields(request, obj) or ()))
        old_formfield_callback = curry(self.formfield_for_dbfield,
                                       request=request)
        defaults = {
            "form": self.form,
            "fields": fields,
            "exclude": exclude,
            "formfield_callback": old_formfield_callback,
        }
        defaults.update(kwargs)
        language = self._language(request)

        if django.VERSION > (2, 1) and 'change' in defaults:
            del defaults['change']

        return translatable_modelform_factory(language, self.model, **defaults)
Example #7
0
    def test_instance_untranslated(self):
        # no language enforced, should load anyway
        with translation.override('en'):
            form = NormalForm(instance=Normal.objects.untranslated().get(
                pk=self.normal_id[1]))
        self.assertFalse(form.is_valid())
        self.assertCountEqual(form.initial,
                              ['shared_field', 'translated_field'])
        self.assertEqual(form.initial['shared_field'], NORMAL[1].shared_field)
        self.assertEqual(form.initial['translated_field'],
                         NORMAL[1].translated_field['en'])
        self.assertIn('value="%s"' % NORMAL[1].shared_field, form.as_p())
        self.assertIn('value="%s"' % NORMAL[1].translated_field['en'],
                      form.as_p())
        self.assertIs(get_cached_translation(form.instance), None)

        # enforce japanese language
        with translation.override('en'):
            Form = translatable_modelform_factory('ja',
                                                  Normal,
                                                  form=NormalForm)
            form = Form(instance=Normal.objects.untranslated().get(
                pk=self.normal_id[1]))
        self.assertFalse(form.is_valid())
        self.assertCountEqual(form.initial,
                              ['shared_field', 'translated_field'])
        self.assertEqual(form.initial['shared_field'], NORMAL[1].shared_field)
        self.assertEqual(form.initial['translated_field'],
                         NORMAL[1].translated_field['ja'])
        self.assertIn('value="%s"' % NORMAL[1].shared_field, form.as_p())
        self.assertIn('value="%s"' % NORMAL[1].translated_field['ja'],
                      form.as_p())
        self.assertIs(get_cached_translation(form.instance), None)
Example #8
0
 def get_form(self, request, obj=None, **kwargs):
     """
     Returns a Form class for use in the admin add view. This is used by
     add_view and change_view.
     """
     if django.VERSION >= (1, 6):
         # From v1.6 on, using get_fieldsets is ok, as long as no 'fields'
         # argument was given. It allows dynamic fieldsets on admin form.
         if 'fields' in kwargs:
             fields = kwargs.pop('fields')
         else:
             fields = flatten_fieldsets(self.get_fieldsets(request, obj))
     else:
         # On previous versions, calling get_fieldsets triggers infinite recursion
         # and we should stick to statically declared fieldsets
         if self.declared_fieldsets:
             fields = flatten_fieldsets(self.declared_fieldsets)
         else:
             fields = None
     exclude = (
         tuple(self.exclude or ()) +
         tuple(kwargs.pop("exclude", ())) +
         self.get_readonly_fields(request, obj)
     )
     old_formfield_callback = curry(self.formfield_for_dbfield, request=request)
     defaults = {
         "form": self.form,
         "fields": fields,
         "exclude": exclude,
         "formfield_callback": old_formfield_callback,
     }
     defaults.update(kwargs)
     language = self._language(request)
     return translatable_modelform_factory(language, self.model, **defaults)
Example #9
0
 def get_form(self, request, obj=None, **kwargs):
     """
     Returns a Form class for use in the admin add view. This is used by
     add_view and change_view.
     """
     if self.declared_fieldsets:
         fields = flatten_fieldsets(self.declared_fieldsets)
     else:
         fields = None
     if self.exclude is None:
         exclude = []
     else:
         exclude = list(self.exclude)
     exclude.extend(kwargs.get("exclude", []))
     exclude.extend(self.get_readonly_fields(request, obj))
     # Exclude language_code, adding it again to the instance is done by
     # the LanguageAwareCleanMixin (see translatable_modelform_factory)
     exclude.append('language_code')
     old_formfield_callback = curry(self.formfield_for_dbfield,
                                    request=request)
     defaults = {
         "form": self.form,
         "fields": fields,
         "exclude": exclude,
         "formfield_callback": old_formfield_callback,
     }
     defaults.update(kwargs)
     language = self._language(request)
     return translatable_modelform_factory(language, self.model, **defaults)
Example #10
0
 def get_form(self, request, obj=None, **kwargs):
     """
     Returns a Form class for use in the admin add view. This is used by
     add_view and change_view.
     """
     if django.VERSION >= (1, 6):
         # From v1.6 on, using get_fieldsets is ok, as long as no 'fields'
         # argument was given. It allows dynamic fieldsets on admin form.
         if 'fields' in kwargs:
             fields = kwargs.pop('fields')
         else:
             fields = flatten_fieldsets(self.get_fieldsets(request, obj))
     else:
         # On previous versions, calling get_fieldsets triggers infinite recursion
         # and we should stick to statically declared fieldsets
         if self.declared_fieldsets:
             fields = flatten_fieldsets(self.declared_fieldsets)
         else:
             fields = None
     exclude = (
         tuple(self.exclude or ()) +
         tuple(kwargs.pop("exclude", ())) +
         self.get_readonly_fields(request, obj)
     )
     old_formfield_callback = curry(self.formfield_for_dbfield, request=request)
     defaults = {
         "form": self.form,
         "fields": fields,
         "exclude": exclude,
         "formfield_callback": old_formfield_callback,
     }
     defaults.update(kwargs)
     language = self._language(request)
     return translatable_modelform_factory(language, self.model, **defaults)
Example #11
0
 def test_accepts_none_clean(self):
     Form = translatable_modelform_factory('en', Normal, form=NoneCleanForm,
                                           fields=['shared_field', 'translated_field'])
     data = {
         'shared_field': 'shared',
         'translated_field': 'English',
     }
     form = Form(data, instance=Normal(), initial=data)
     self.assertTrue(form.is_valid(), form.errors.as_text())
Example #12
0
    def test_no_meta(self):
        'Empty form and filled in variant from factory'
        class Form(TranslatableModelForm):
            pass
        self.assertIs(Form._meta.fields, None)
        self.assertCountEqual(Form._meta.exclude, ['language_code'])
        self.assertCountEqual(Form.base_fields, [])

        engineered = translatable_modelform_factory('en', Normal, form=Form)
        self.assertIs(Form._meta.fields, None)
        self.assertCountEqual(engineered._meta.exclude, ['language_code', 'translations'])
        self.assertCountEqual(engineered.base_fields, ['shared_field', 'translated_field'])
Example #13
0
    def test_no_meta(self):
        'Empty form and filled in variant from factory'
        class Form(TranslatableModelForm):
            pass
        self.assertIs(Form._meta.fields, None)
        self.assertCountEqual(Form._meta.exclude, [])
        self.assertCountEqual(Form.base_fields, [])

        engineered = translatable_modelform_factory('en', Normal, form=Form)
        self.assertIs(Form._meta.fields, None)
        self.assertCountEqual(engineered._meta.exclude, ['translations'])
        self.assertCountEqual(engineered.base_fields, ['shared_field', 'translated_field'])
Example #14
0
 def test_instance_initial(self):
     Form = translatable_modelform_factory('ja', Normal, form=NormalForm)
     initial = {
         'shared_field': 'shared_initial',
         'translated_field': 'translated_initial',
     }
     form = Form(instance=Normal.objects.language('ja').get(pk=self.normal_id[1]),
                 initial=initial)
     self.assertFalse(form.is_valid())
     self.assertCountEqual(form.initial, ['shared_field', 'translated_field'])
     self.assertEqual(form.initial['shared_field'], 'shared_initial')
     self.assertEqual(form.initial['translated_field'], 'translated_initial')
Example #15
0
 def test_instance_initial(self):
     Form = translatable_modelform_factory('ja', Normal, form=NormalForm)
     initial = {
         'shared_field': 'shared_initial',
         'translated_field': 'translated_initial',
     }
     form = Form(instance=Normal.objects.language('ja').get(pk=self.normal_id[1]),
                 initial=initial)
     self.assertFalse(form.is_valid())
     self.assertCountEqual(form.initial, ['shared_field', 'translated_field'])
     self.assertEqual(form.initial['shared_field'], 'shared_initial')
     self.assertEqual(form.initial['translated_field'], 'translated_initial')
Example #16
0
    def test_only_fields(self):
        'Empty form and filled in variant from factory - applies field restriction'
        class Form(TranslatableModelForm):
            class Meta:
                fields = ('shared_field', 'translated_field')
        self.assertCountEqual(Form._meta.fields, ['shared_field', 'translated_field'])
        self.assertCountEqual(Form._meta.exclude, ['language_code'])
        self.assertCountEqual(Form.base_fields, [])

        engineered = translatable_modelform_factory('en', Normal, form=Form)
        self.assertCountEqual(engineered._meta.fields, ['shared_field', 'translated_field'])
        self.assertCountEqual(engineered._meta.exclude, ['language_code', 'translations'])
        self.assertCountEqual(engineered.base_fields, ['shared_field', 'translated_field'])
Example #17
0
 def test_language_code_enforcing_override(self):
     'Custom clean() method should see language_code and be able to override it'
     Form = translatable_modelform_factory('ja', Normal, form=CustomLanguageNormalForm)
     data = {
         'shared_field': 'shared',
         'translated_field': 'Japanese',
     }
     form = Form(data)
     self.assertTrue(form.is_valid(), form.errors.as_text())
     self.assertCountEqual(form.cleaned_data, ['shared_field', 'translated_field',
                                               'seen_language', 'language_code'])
     self.assertIs(form.cleaned_data['seen_language'], 'ja')
     self.assertEqual(form.cleaned_data['language_code'], 'sr')
Example #18
0
    def test_language_code_enforcing(self):
        'With language_code enforcing, language should be set automatically'
        Form = translatable_modelform_factory('ja', Normal, form=NormalForm)
        data = {
            'shared_field': 'shared',
            'translated_field': 'Japanese',
        }
        form = Form(data)
        self.assertTrue(form.is_valid(), form.errors.as_text())
        self.assertCountEqual(form.cleaned_data, ['shared_field', 'translated_field', 'language_code'])
        self.assertEqual(form.cleaned_data['language_code'], 'ja')

        data = {
            'shared_field': 'shared',
            'translated_field': 'Japanese',
            'language_code': 'sr',
        }
        Form = translatable_modelform_factory('ja', Normal, form=NormalForm)
        form = Form(data)
        self.assertTrue(form.is_valid(), form.errors.as_text())
        self.assertCountEqual(form.cleaned_data, ['shared_field', 'translated_field', 'language_code'])
        self.assertEqual(form.cleaned_data['language_code'], 'ja')
Example #19
0
 def test_language_code_enforcing_override(self):
     'Custom clean() method should see language_code and be able to override it'
     Form = translatable_modelform_factory('ja', Normal, form=CustomLanguageNormalForm)
     data = {
         'shared_field': 'shared',
         'translated_field': 'Japanese',
     }
     form = Form(data)
     self.assertTrue(form.is_valid(), form.errors.as_text())
     self.assertCountEqual(form.cleaned_data, ['shared_field', 'translated_field',
                                               'seen_language', 'language_code'])
     self.assertIs(form.cleaned_data['seen_language'], 'ja')
     self.assertEqual(form.cleaned_data['language_code'], 'sr')
Example #20
0
    def test_only_fields(self):
        'Empty form and filled in variant from factory - applies field restriction'
        class Form(TranslatableModelForm):
            class Meta:
                fields = ('shared_field', 'translated_field')
        self.assertCountEqual(Form._meta.fields, ['shared_field', 'translated_field'])
        self.assertCountEqual(Form._meta.exclude, [])
        self.assertCountEqual(Form.base_fields, [])

        engineered = translatable_modelform_factory('en', Normal, form=Form)
        self.assertCountEqual(engineered._meta.fields, ['shared_field', 'translated_field'])
        self.assertCountEqual(engineered._meta.exclude, ['translations'])
        self.assertCountEqual(engineered.base_fields, ['shared_field', 'translated_field'])
Example #21
0
    def get_form_class(self):
        if self.model is not None:
            model = self.model
        elif getattr(self, 'object', None) is not None:
            model = self.object.__class__
        else:
            qs = self.get_queryset()
            model = getattr(qs, 'shared_model', qs.model)

        kwargs = {}
        if self.form_class is not None:
            kwargs['form'] = self.form_class
        return translatable_modelform_factory(self.get_language(), model, **kwargs)
Example #22
0
    def get_form_class(self):
        if self.model is not None:
            model = self.model
        elif getattr(self, 'object', None) is not None:
            model = self.object.__class__
        else:
            qs = self.get_queryset()
            model = getattr(qs, 'shared_model', qs.model)

        kwargs = {}
        if self.form_class is not None:
            kwargs['form'] = self.form_class
        return translatable_modelform_factory(self.get_language(), model, **kwargs)
Example #23
0
    def test_fields_all(self):
        'Empty form and filled in variant from factory - using __all__ special value'
        class Form(TranslatableModelForm):
            class Meta:
                model = Normal
                fields = '__all__'
        self.assertIs(Form._meta.fields, None)
        self.assertCountEqual(Form._meta.exclude, ['translations'])
        self.assertCountEqual(Form.base_fields, ['shared_field', 'translated_field'])

        engineered = translatable_modelform_factory('en', Normal, form=Form)
        self.assertIs(engineered._meta.fields, None)
        self.assertCountEqual(engineered._meta.exclude, ['translations'])
        self.assertCountEqual(engineered.base_fields, ['shared_field', 'translated_field'])
Example #24
0
 def test_create_enforcing(self):
     'Calling save() on a new instance with a language_code in cleaned_data'
     Form = translatable_modelform_factory('ja', Normal, form=NormalForm)
     data = {
         'shared_field': 'shared',
         'translated_field': 'Japanese',
     }
     with translation.override('en'):
         form = Form(data, instance=Normal(language_code='sr'))
         with self.assertNumQueries(2):
             obj = form.save()
         with self.assertNumQueries(0):
             self.assertNotEqual(obj.pk, None)
             self.assertEqual(obj.language_code, 'ja')
             self.assertEqual(obj.shared_field, 'shared')
             self.assertEqual(obj.translated_field, 'Japanese')
Example #25
0
 def test_create_enforcing(self):
     'Calling save() on a new instance with a language_code in cleaned_data'
     Form = translatable_modelform_factory('ja', Normal, form=NormalForm)
     data = {
         'shared_field': 'shared',
         'translated_field': 'Japanese',
     }
     with translation.override('en'):
         form = Form(data, instance=Normal(language_code='sr'))
         with self.assertNumQueries(2):
             obj = form.save()
         with self.assertNumQueries(0):
             self.assertNotEqual(obj.pk, None)
             self.assertEqual(obj.language_code, 'ja')
             self.assertEqual(obj.shared_field, 'shared')
             self.assertEqual(obj.translated_field, 'Japanese')
Example #26
0
    def test_fields_all(self):
        'Empty form and filled in variant from factory - using __all__ special value'

        class Form(TranslatableModelForm):
            class Meta:
                model = Normal
                fields = '__all__'

        self.assertIs(Form._meta.fields, None)
        self.assertCountEqual(Form._meta.exclude, ['translations'])
        self.assertCountEqual(Form.base_fields,
                              ['shared_field', 'translated_field'])

        engineered = translatable_modelform_factory('en', Normal, form=Form)
        self.assertIs(engineered._meta.fields, None)
        self.assertCountEqual(engineered._meta.exclude, ['translations'])
        self.assertCountEqual(engineered.base_fields,
                              ['shared_field', 'translated_field'])
Example #27
0
 def test_update_enforcing(self):
     'Calling save on an existing instance, with a language_code in cleaned_data'
     Form = translatable_modelform_factory('sr', Normal, form=NormalForm)
     data = {
         'shared_field': 'shared',
         'translated_field': u'српски',
     }
     with translation.override('en'):
         # wrong translation is loaded, override it
         form = Form(data, instance=Normal.objects.language('ja').get(pk=self.normal_id[1]))
         with self.assertNumQueries(3 if django.VERSION >= (1, 6) else 4):
             obj = form.save()
         with self.assertNumQueries(0):
             self.assertEqual(obj.pk, self.normal_id[1])
             self.assertEqual(obj.language_code, 'sr')
             self.assertEqual(obj.shared_field, 'shared')
             self.assertEqual(obj.translated_field, u'српски')
         self.assertEqual(Normal.objects.language('sr').get(pk=self.normal_id[1]).translated_field,
                          u'српски')
Example #28
0
 def test_update_enforcing(self):
     'Calling save on an existing instance, with a language_code in cleaned_data'
     Form = translatable_modelform_factory('sr', Normal, form=NormalForm)
     data = {
         'shared_field': 'shared',
         'translated_field': u'српски',
     }
     with translation.override('en'):
         # wrong translation is loaded, override it
         form = Form(data, instance=Normal.objects.language('ja').get(pk=self.normal_id[1]))
         with self.assertNumQueries(3 if django.VERSION >= (1, 6) else 4):
             obj = form.save()
         with self.assertNumQueries(0):
             self.assertEqual(obj.pk, self.normal_id[1])
             self.assertEqual(obj.language_code, 'sr')
             self.assertEqual(obj.shared_field, 'shared')
             self.assertEqual(obj.translated_field, u'српски')
         self.assertEqual(Normal.objects.language('sr').get(pk=self.normal_id[1]).translated_field,
                          u'српски')
Example #29
0
    def test_instance_wrong_translation(self):
        # no language enforced
        form = NormalForm(instance=Normal.objects.language('en').get(pk=self.normal_id[1]))
        self.assertFalse(form.is_valid())
        self.assertCountEqual(form.initial, ['shared_field', 'translated_field'])
        self.assertEqual(form.initial['shared_field'], NORMAL[1].shared_field)
        self.assertEqual(form.initial['translated_field'], NORMAL[1].translated_field['en'])
        self.assertIn('value="%s"' % NORMAL[1].shared_field, form.as_p())
        self.assertIn('value="%s"' % NORMAL[1].translated_field['en'], form.as_p())
        self.assertEqual(get_cached_translation(form.instance).language_code, 'en')

        # enforce japanese language
        Form = translatable_modelform_factory('ja', Normal, form=NormalForm)
        form = Form(instance=Normal.objects.language('en').get(pk=self.normal_id[1]))
        self.assertFalse(form.is_valid())
        self.assertCountEqual(form.initial, ['shared_field', 'translated_field'])
        self.assertEqual(form.initial['shared_field'], NORMAL[1].shared_field)
        self.assertEqual(form.initial['translated_field'], NORMAL[1].translated_field['ja'])
        self.assertIn('value="%s"' % NORMAL[1].shared_field, form.as_p())
        self.assertIn('value="%s"' % NORMAL[1].translated_field['ja'], form.as_p())
        self.assertEqual(get_cached_translation(form.instance).language_code, 'en')
Example #30
0
 def test_set_fields_before_save(self):
     'Manually set some translated fields before calling save()'
     Form = translatable_modelform_factory('sr', Normal, form=NormalForm,
                                           exclude=['translated_field'])
     data = {
         'shared_field': 'shared',
     }
     with translation.override('en'):
         form = Form(data, instance=Normal.objects.language('ja').get(pk=self.normal_id[1]))
         with self.assertNumQueries(1):
             self.assertTrue(form.is_valid())
         form.instance.translated_field = u'ћирилица'
         with self.assertNumQueries(2 if django.VERSION >= (1, 6) else 3):
             obj = form.save()
         with self.assertNumQueries(0):
             self.assertEqual(obj.pk, self.normal_id[1])
             self.assertEqual(obj.language_code, 'sr')
             self.assertEqual(obj.shared_field, 'shared')
             self.assertEqual(obj.translated_field, u'ћирилица')
         self.assertEqual(Normal.objects.language('sr').get(pk=self.normal_id[1]).translated_field,
                          u'ћирилица')
Example #31
0
 def get_form(self, request, obj=None, **kwargs):
     """
     Returns a Form class for use in the admin add view. This is used by
     add_view and change_view.
     """
     
     if django.VERSION >= (1, 6):
         # From v1.6 on, using get_fieldsets is ok, as long as no 'fields'
         # argument was given. It allows dynamic fieldsets on admin form.
         if 'fields' in kwargs:
             fields = kwargs.pop('fields')
         else:
             fields = flatten_fieldsets(self.get_fieldsets(request, obj))
     else:
         # On previous versions, calling get_fieldsets triggers infinite recursion
         # and we should stick to statically declared fieldsets
         if self.declared_fieldsets:
             fields = flatten_fieldsets(self.declared_fieldsets)
         else:
             fields = None
     if self.exclude is None:
         exclude = []
     else:
         exclude = list(self.exclude)
     exclude.extend(kwargs.get("exclude", []))
     exclude.extend(self.get_readonly_fields(request, obj))
     # Exclude language_code, adding it again to the instance is done by
     # the LanguageAwareCleanMixin (see translatable_modelform_factory)
     exclude.append('language_code')
     old_formfield_callback = curry(self.formfield_for_dbfield, 
                                    request=request)
     defaults = {
         "form": self.form,
         "fields": fields,
         "exclude": exclude,
         "formfield_callback": old_formfield_callback,
     }
     defaults.update(kwargs)
     language = self._language(request)
     return translatable_modelform_factory(language, self.model, **defaults)
Example #32
0
    def get_form(self, request, obj=None, **kwargs):
        """
        Returns a Form class for use in the admin add view. This is used by
        add_view and change_view.
        """

        if django.VERSION >= (1, 6):
            # From v1.6 on, using get_fieldsets is ok, as long as no 'fields'
            # argument was given. It allows dynamic fieldsets on admin form.
            if 'fields' in kwargs:
                fields = kwargs.pop('fields')
            else:
                fields = flatten_fieldsets(self.get_fieldsets(request, obj))
        else:
            # On previous versions, calling get_fieldsets triggers infinite recursion
            # and we should stick to statically declared fieldsets
            if self.declared_fieldsets:
                fields = flatten_fieldsets(self.declared_fieldsets)
            else:
                fields = None
        if self.exclude is None:
            exclude = []
        else:
            exclude = list(self.exclude)
        exclude.extend(kwargs.get("exclude", []))
        exclude.extend(self.get_readonly_fields(request, obj))
        # Exclude language_code, adding it again to the instance is done by
        # the LanguageAwareCleanMixin (see translatable_modelform_factory)
        exclude.append('language_code')
        old_formfield_callback = curry(self.formfield_for_dbfield,
                                       request=request)
        defaults = {
            "form": self.form,
            "fields": fields,
            "exclude": exclude,
            "formfield_callback": old_formfield_callback,
        }
        defaults.update(kwargs)
        language = self._language(request)
        return translatable_modelform_factory(language, self.model, **defaults)
Example #33
0
    def test_instance_untranslated(self):
        # no language enforced, should load anyway
        with translation.override('en'):
            form = NormalForm(instance=Normal.objects.untranslated().get(pk=self.normal_id[1]))
        self.assertFalse(form.is_valid())
        self.assertCountEqual(form.initial, ['shared_field', 'translated_field'])
        self.assertEqual(form.initial['shared_field'], NORMAL[1].shared_field)
        self.assertEqual(form.initial['translated_field'], NORMAL[1].translated_field['en'])
        self.assertIn('value="%s"' % NORMAL[1].shared_field, form.as_p())
        self.assertIn('value="%s"' % NORMAL[1].translated_field['en'], form.as_p())
        self.assertIs(get_cached_translation(form.instance), None)

        # enforce japanese language
        with translation.override('en'):
            Form = translatable_modelform_factory('ja', Normal, form=NormalForm)
            form = Form(instance=Normal.objects.untranslated().get(pk=self.normal_id[1]))
        self.assertFalse(form.is_valid())
        self.assertCountEqual(form.initial, ['shared_field', 'translated_field'])
        self.assertEqual(form.initial['shared_field'], NORMAL[1].shared_field)
        self.assertEqual(form.initial['translated_field'], NORMAL[1].translated_field['ja'])
        self.assertIn('value="%s"' % NORMAL[1].shared_field, form.as_p())
        self.assertIn('value="%s"' % NORMAL[1].translated_field['ja'], form.as_p())
        self.assertIs(get_cached_translation(form.instance), None)
Example #34
0
 def get_form(self, request, obj=None, **kwargs):
     """
     Returns a Form class for use in the admin add view. This is used by
     add_view and change_view.
     """
     if 'fields' in kwargs:
         fields = kwargs.pop('fields')
     else:
         fields = flatten_fieldsets(self.get_fieldsets(request, obj))
     exclude = (
         tuple(self.exclude or ()) +
         tuple(kwargs.pop("exclude", ())) +
         self.get_readonly_fields(request, obj)
     )
     old_formfield_callback = curry(self.formfield_for_dbfield, request=request)
     defaults = {
         "form": self.form,
         "fields": fields,
         "exclude": exclude,
         "formfield_callback": old_formfield_callback,
     }
     defaults.update(kwargs)
     language = self._language(request)
     return translatable_modelform_factory(language, self.model, **defaults)
Example #35
0
 def get_form_class(self):
     language = self._language(self.request)
     return translatable_modelform_factory(language,
                                           self.model,
                                           form=self.form_class)
Example #36
0
 def get_form_class(self):
     return translatable_modelform_factory(self.get_language(), self.model, AppForm)
Example #37
0
 def get_form_class(self):
     language = self._language(self.request)
     return translatable_modelform_factory(language, self.model, form=self.form_class)