Атрибут exclude
Атрибут exclude применяется в классе ModelAdmin
и позволяет указать список полей модели, которые не должны
отображаться в форме редактирования или создания записи.
В отличие от атрибута fields, где перечисляются
поля для отображения, exclude работает наоборот:
из формы удаляются все поля, перечисленные в этом атрибуте.
Синтаксис
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
exclude = ('field1', 'field2')
Пример
Рассмотрим модель Article с полями title, content,
author, created_at и status.
Исключим из формы поля created_at и status:
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
author = models.CharField(max_length=100)
created_at = models.DateTimeField(auto_now_add=True)
status = models.CharField(max_length=20, default='draft')
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
exclude = ('created_at', 'status')
admin.site.register(Article, ArticleAdmin)
В результате форма редактирования статьи в административной панели
будет содержать только поля title, content и author,
а поля created_at и status не будут отображаться.
Пример
Используем атрибут exclude вместе с fieldsets.
Определим группу полей и исключим поле slug из формы:
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=100)
slug = models.SlugField(unique=True)
description = models.TextField(blank=True)
is_active = models.BooleanField(default=True)
from django.contrib import admin
from .models import Category
class CategoryAdmin(admin.ModelAdmin):
fieldsets = (
('Основная информация', {
'fields': ('name', 'slug')
}),
('Дополнительно', {
'fields': ('description', 'is_active')
}),
)
exclude = ('slug',)
admin.site.register(Category, CategoryAdmin)
Теперь в форме редактирования категории поле slug
будет исключено из всех групп, несмотря на то,
что оно указано в fieldsets.
Пример
Исключим несколько полей сразу. Рассмотрим модель UserProfile
с полями user, phone, address, birth_date
и bio. Исключим поля user и birth_date:
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
phone = models.CharField(max_length=15, blank=True)
address = models.TextField(blank=True)
birth_date = models.DateField(null=True, blank=True)
bio = models.TextField(blank=True)
from django.contrib import admin
from .models import UserProfile
class UserProfileAdmin(admin.ModelAdmin):
exclude = ('user', 'birth_date')
admin.site.register(UserProfile, UserProfileAdmin)
В форме редактирования профиля пользователя останутся
только поля phone, address и bio.
Поля user и birth_date будут скрыты.
Смотрите также
-
атрибут
fields,
который определяет порядок отображения полей в форме -
атрибут
fieldsets,
который группирует поля в форме редактирования -
атрибут
readonly_fields,
который делает поля доступными только для чтения -
атрибут
list_display,
который определяет поля, отображаемые в списке записей