Подробное руководство: добавление новых полей в ModelAdmin с помощью наборов полей в Django

В Django класс ModelAdmin предоставляет мощный интерфейс для управления моделями на сайте администрирования. Одним из распространенных требований является добавление новых полей в интерфейс администратора для редактирования информации о пользователе или при создании нового пользователя. В этой статье вы познакомитесь с различными методами добавления новых полей в ModelAdmin с использованием наборов полей. Мы рассмотрим несколько подходов с примерами кода, которые помогут вам эффективно реализовать эту функцию.

Метод 1: добавление полей непосредственно в класс ModelAdmin

Самый простой способ добавить новые поля в ModelAdmin — определить их непосредственно в классе. Вот пример:

from django.contrib import admin
from django.contrib.auth.models import User
class CustomUserAdmin(admin.ModelAdmin):
    fieldsets = (
        ('Personal Information', {
            'fields': ('first_name', 'last_name', 'email'),
        }),
        ('Permissions', {
            'fields': ('is_staff', 'is_active', 'groups', 'user_permissions'),
        }),
        # Add your custom fieldsets here
        ('Custom Fields', {
            'fields': ('custom_field1', 'custom_field2'),
        }),
    )
admin.site.register(User, CustomUserAdmin)

В приведенном выше коде мы добавили два поля («custom_field1» и «custom_field2») в набор полей «Пользовательские поля».

Метод 2. Использование декоратора для расширения класса ModelAdmin

Другой подход — использовать декоратор @admin.registerдля расширения класса ModelAdmin. Этот метод позволяет вам определить поля отдельно, а затем зарегистрировать модель в пользовательском классе администратора. Вот пример:

from django.contrib import admin
from django.contrib.auth.models import User
@admin.register(User)
class CustomUserAdmin(admin.ModelAdmin):
    fieldsets = (
        ('Personal Information', {
            'fields': ('first_name', 'last_name', 'email'),
        }),
        ('Permissions', {
            'fields': ('is_staff', 'is_active', 'groups', 'user_permissions'),
        }),
        # Add your custom fieldsets here
        ('Custom Fields', {
            'fields': ('custom_field1', 'custom_field2'),
        }),
    )

Метод 3. Использование add_fieldsets для создания нового пользователя

При создании нового пользователя в интерфейсе администратора вы можете включить дополнительные поля. Django предоставляет атрибут add_fieldsetsдля указания наборов полей для формы создания. Вот пример:

from django.contrib import admin
from django.contrib.auth.models import User
class CustomUserAdmin(admin.ModelAdmin):
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('username', 'password1', 'password2', 'custom_field1', 'custom_field2'),
        }),
    )
admin.site.register(User, CustomUserAdmin)

В приведенном выше коде мы добавили поля «custom_field1» и «custom_field2» в форму добавления пользователя.

В этой статье мы рассмотрели несколько способов добавления новых полей в ModelAdmin с использованием наборов полей в Django. Следуя этим подходам, вы можете расширить интерфейс администратора Django, включив в него настраиваемые поля для редактирования информации о пользователе и при создании новых пользователей. Не забудьте выбрать метод, который лучше всего соответствует вашим потребностям и структуре проекта.

Применяя эти методы, вы можете улучшить функциональность сайта администрирования Django и обеспечить более индивидуальный подход к управлению пользователями.