РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
598 of 818 menu

Атрибут readonly_fields

Атрибут readonly_fields используется в классе ModelAdmin для указания полей, которые будут отображаться только для чтения при редактировании существующих записей. Это полезно для полей, которые должны быть видны пользователю, но не должны изменяться им, например, поля с датой создания записи или вычисляемые поля. Атрибут принимает кортеж или список строк с именами полей модели или вызываемых объектов.

Синтаксис

from django.contrib import admin from myapp.models import Article class ArticleAdmin(admin.ModelAdmin): readonly_fields = ('field_name', 'another_field')

Пример . С простыми полями

Предположим, у нас есть модель статьи с полями 'title', 'content', 'created_at' и 'updated_at'. Сделаем поля с датами только для чтения:

from django.contrib import admin from myapp.models import Article class ArticleAdmin(admin.ModelAdmin): list_display = ('title', 'created_at', 'updated_at') readonly_fields = ('created_at', 'updated_at')

Теперь при редактировании статьи поля 'created_at' и 'updated_at' будут отображаться как обычный текст, а не как поля ввода, и их значения нельзя будет изменить через форму редактирования.

Пример . С вычисляемым полем

Атрибут readonly_fields также поддерживает использование вызываемых объектов (методов или функций) для создания вычисляемых полей, которые отображаются только для чтения:

from django.contrib import admin from django.utils.html import format_html from myapp.models import Article class ArticleAdmin(admin.ModelAdmin): readonly_fields = ('created_at', 'full_content_preview') def full_content_preview(self, obj): if len(obj.content) > 100: return format_html( '{}...', obj.content[:100] ) return obj.content full_content_preview.short_description = 'Превью контента'

В этом примере метод full_content_preview возвращает первые 100 символов содержимого статьи, а readonly_fields включает это вычисляемое поле. Поле будет отображаться в форме редактирования как текст, но его значение вычисляется динамически на основе данных модели.

Пример . С ForeignKey

Для полей типа ForeignKey также можно использовать readonly_fields, чтобы отобразить связанный объект только для чтения:

from django.contrib import admin from myapp.models import Article, Category class ArticleAdmin(admin.ModelAdmin): list_display = ('title', 'category', 'created_at') readonly_fields = ('category', 'created_at')

Теперь поле 'category' будет отображаться как текстовое представление связанной категории, и его нельзя будет изменить через выпадающий список.

Смотрите также

  • атрибут list_display,
    который определяет поля, отображаемые в списке записей
  • атрибут fields,
    который определяет порядок и набор полей в форме редактирования
  • атрибут exclude,
    который исключает поля из формы редактирования
  • атрибут list_editable,
    который позволяет редактировать поля прямо в списке записей
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить