Merge pull request #470 from chubz/master

fix: copy form defined widget attrs
This commit is contained in:
Dirk Eschler 2018-07-02 11:52:51 +02:00 committed by GitHub
commit 1a17f995cd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 0 deletions

View file

@ -66,6 +66,12 @@ class TranslationBaseModelAdmin(BaseModelAdmin):
else:
orig_formfield = self.formfield_for_dbfield(orig_field, **kwargs)
field.widget = deepcopy(orig_formfield.widget)
# if any widget attrs are defined on the form they should be copied
try:
field.widget = deepcopy(self.form._meta.widgets[orig_field.name])
except (AttributeError, TypeError, KeyError):
pass
# field.widget = deepcopy(orig_formfield.widget)
if orig_field.name in self.both_empty_values_fields:
from modeltranslation.forms import NullableField, NullCharField
form_class = field.__class__

View file

@ -2200,6 +2200,35 @@ class TranslationAdminTest(ModeltranslationTestBase):
self.assertEqual(
tuple(ma.get_form(request, self.test_obj).base_fields.keys()), tuple(fields))
def test_model_form_widgets(self):
class TestModelForm(forms.ModelForm):
class Meta:
model = models.TestModel
fields = ['text', ]
widgets = {
'text': forms.Textarea(attrs={'myprop': 'myval'}),
}
class TestModelAdmin(admin.TranslationAdmin):
form = TestModelForm
ma = TestModelAdmin(models.TestModel, self.site)
fields = ['text_de', 'text_en']
self.assertEqual(
tuple(ma.get_form(request).base_fields.keys()), tuple(fields))
self.assertEqual(
tuple(ma.get_form(request, self.test_obj).base_fields.keys()), tuple(fields))
for field in fields:
self.assertIn(
'myprop',
ma.get_form(request).base_fields.get(field).widget.attrs.keys()
)
self.assertIn(
'myval',
ma.get_form(request, self.test_obj).base_fields.get(field).widget.attrs.values()
)
def test_inline_fieldsets(self):
class DataInline(admin.TranslationStackedInline):
model = models.DataModel