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

Атрибут prepopulated_fields

Атрибут prepopulated_fields класса ModelAdmin позволяет автоматически генерировать значение для одного или нескольких полей на основе значений других полей при создании или редактировании объекта в административной панели Django. Это особенно полезно для создания URL-идентификаторов (слаг-полей) на основе заголовков или других текстовых полей. Атрибут принимает словарь, где ключ - это поле, которое должно быть автоматически заполнено, а значение - кортеж или список полей, на основе которых оно генерируется.

Автоматическое заполнение происходит на стороне клиента с использованием JavaScript, что обеспечивает мгновенное обновление значений при вводе данных пользователем. При этом символы преобразуются в URL-совместимый формат: пробелы заменяются на дефисы, удаляются недопустимые символы, а текст приводится к нижнему регистру.

Синтаксис

from django.contrib import admin from .models import Article class ArticleAdmin(admin.ModelAdmin): prepopulated_fields = { 'field_to_prepopulate': ('source_field1', 'source_field2', ...), }

Пример

Допустим, у нас есть модель Article с полями title и slug. Атрибут prepopulated_fields настроим для автоматического создания слага на основе заголовка:

from django.db import models from django.utils import timezone class Article(models.Model): title = models.CharField(max_length=200) slug = models.SlugField(max_length=200, unique=True) content = models.TextField() published_at = models.DateTimeField(default=timezone.now) def __str__(self): return self.title
from django.contrib import admin from .models import Article class ArticleAdmin(admin.ModelAdmin): prepopulated_fields = { 'slug': ('title',), } admin.site.register(Article, ArticleAdmin)

При вводе заголовка статьи "Моя первая статья" в поле slug автоматически появится значение "моя-первая-статья". При изменении заголовка поле слага будет обновляться автоматически.

Пример

Рассмотрим пример с комбинацией нескольких полей для создания слага на основе категории и названия:

from django.db import models class Category(models.Model): name = models.CharField(max_length=100) def __str__(self): return self.name class Product(models.Model): name = models.CharField(max_length=200) category = models.ForeignKey(Category, on_delete=models.CASCADE) slug = models.SlugField(max_length=200, unique=True) description = models.TextField()
from django.contrib import admin from .models import Product, Category class ProductAdmin(admin.ModelAdmin): prepopulated_fields = { 'slug': ('category', 'name'), } admin.site.register(Product, ProductAdmin) admin.site.register(Category)

При выборе категории "электроника" и вводе названия "ноутбук" поле slug автоматически заполнится значением "электроника-ноутбук".

Пример

Атрибут prepopulated_fields может автоматически заполнять несколько полей одновременно:

from django.db import models class Post(models.Model): title = models.CharField(max_length=200) slug = models.SlugField(max_length=200, unique=True) meta_keywords = models.CharField(max_length=255, blank=True) content = models.TextField() def __str__(self): return self.title
from django.contrib import admin from .models import Post class PostAdmin(admin.ModelAdmin): prepopulated_fields = { 'slug': ('title',), 'meta_keywords': ('title', 'content'), } admin.site.register(Post, PostAdmin)

Теперь при вводе заголовка и текста статьи поля slug и meta_keywords будут заполняться автоматически, причем meta_keywords будет генерироваться на основе двух полей.

Важные особенности

Для корректной работы атрибута prepopulated_fields поле, которое должно автоматически заполняться (ключ в словаре), должно быть типа SlugField, CharField или аналогичного текстового поля. При использовании SlugField рекомендуется устанавливать атрибут unique=True для гарантии уникальности URL-идентификаторов.

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

Если в настройках административной панели используется атрибут fields или fieldsets, необходимо убедиться, что поля, указанные в prepopulated_fields, присутствуют в этих настройках, иначе автоматическое заполнение работать не будет.

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

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