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

Атрибут form

Атрибут form применяется в классе ModelAdmin для замены стандартной формы редактирования модели на пользовательскую. Это позволяет настраивать поведение полей, добавлять валидацию, изменять отображение и управлять процессом сохранения данных. Атрибут принимает класс формы, унаследованный от forms.ModelForm.

Синтаксис

from django.contrib import admin from django import forms from .models import Article class ArticleForm(forms.ModelForm): class Meta: model = Article fields = '__all__' @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): form = ArticleForm

Пример

Давайте создадим пользовательскую форму для модели Article с добавлением валидации поля заголовка:

from django.contrib import admin from django import forms from .models import Article class ArticleForm(forms.ModelForm): class Meta: model = Article fields = ['title', 'content', 'status', 'category'] def clean_title(self): title = self.cleaned_data.get('title') if len(title) < 5: raise forms.ValidationError('Title must be at least 5 characters long.') return title @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): form = ArticleForm

Результат выполнения кода:

"Admin form for Article now validates title length"

Пример

Давайте добавим в форму дополнительные поля, которые не соответствуют модели, для отображения вычисляемых данных:

from django.contrib import admin from django import forms from .models import Article class ArticleForm(forms.ModelForm): word_count = forms.IntegerField(required=False, disabled=True) class Meta: model = Article fields = ['title', 'content', 'status', 'category', 'word_count'] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if self.instance and self.instance.pk: words = len(self.instance.content.split()) self.fields['word_count'].initial = words @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): form = ArticleForm readonly_fields = ['word_count']

Результат выполнения кода:

"Word count field appears in admin edit form"

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

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