|
| 1 | +from functools import cached_property |
| 2 | + |
| 3 | +from django.utils.text import format_lazy |
| 4 | + |
| 5 | +from django.conf import settings |
1 | 6 | from django.contrib import admin |
| 7 | +from django.utils.translation import gettext_lazy as _ |
2 | 8 |
|
3 | 9 | from finder.admin.file import FileAdmin |
4 | 10 | from finder.contrib.image.forms import ImageFileForm |
|
7 | 13 |
|
8 | 14 | @admin.register(ImageFileModel) |
9 | 15 | class ImageAdmin(FileAdmin): |
10 | | - form = ImageFileForm |
| 16 | + |
| 17 | + @cached_property |
| 18 | + def form(self): |
| 19 | + attrs, extra_fields = {}, [] |
| 20 | + alt_text_field = ImageFileForm.declared_fields['alt_text'] |
| 21 | + meta_data_fields = list(ImageFileForm._meta.entangled_fields['meta_data']) |
| 22 | + index = meta_data_fields.index('alt_text') |
| 23 | + if settings.USE_I18N and len(settings.LANGUAGES) > 1: |
| 24 | + for code, language in settings.LANGUAGES: |
| 25 | + if code != settings.LANGUAGE_CODE: |
| 26 | + field_name = f'alt_text_{code}' |
| 27 | + label = format_lazy(_("{field} ({language})"), field=alt_text_field.label, language=language) |
| 28 | + attrs[field_name] = alt_text_field.__class__(**dict(alt_text_field.__dict__, label=label)) |
| 29 | + extra_fields.append(field_name) |
| 30 | + index += 1 |
| 31 | + meta_data_fields.insert(index, field_name) |
| 32 | + |
| 33 | + attrs['Meta'] = type('Meta', (ImageFileForm.Meta,), { |
| 34 | + 'entangled_fields': {'meta_data': meta_data_fields}, |
| 35 | + 'fields': ImageFileForm._meta.fields + extra_fields, |
| 36 | + }) |
| 37 | + return type(ImageFileForm.__name__, ImageFileForm.__mro__, attrs) |
11 | 38 |
|
12 | 39 | def get_editor_settings(self, request, inode): |
13 | 40 | settings = super().get_editor_settings(request, inode) |
|
0 commit comments