Атрибут 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,
который определяет поля, отображаемые в списке объектов