Другое, более подходящее решение, работает в Django 2.1.2:
ModelAdmin отображает поля только для чтения с помощью специальной оболочки AdminReadonlyField (django / contrib / admin / helpers.py), еслимы смотрим на метод contents
, мы видим код
if getattr(widget, 'read_only', False):
return widget.render(field, value)
Это означает, что если виджет имеет атрибут read_only
со значением True
, то поле только для чтения вызовет метод рендеринга виджета.Следовательно, вы можете использовать метод рендеринга для форматирования вашего значения.
Например:
class CustomDateInput(widgets.DateInput):
read_only = True
def _render(self, template_name, context, renderer=None):
return 'you value'
class CustomForm(forms.ModelForm):
some_field = forms.DateTimeField(widget=CustomDateInput())
@admin.register(SomeModel)
class SomeModelAdmin(admin.ModelAdmin):
form = CustomForm
readonly_fields = ['some_field']