Создание проекта, первые модели и админ-панель

⏱ 25 мин · 🧩 заданий: 6

Проект для практики

Создадим проект-библиотеку, на котором отработаем модели и ORM в этом модуле:

mkdir library_project && cd library_project
python -m venv venv
source venv/bin/activate          # Windows: venv\Scripts\activate
pip install django
django-admin startproject config .
python manage.py startapp library

Добавьте приложение в INSTALLED_APPS:

INSTALLED_APPS = [
    ...
    "library",
]

Что такое модель

Модель — Python-класс, который описывает таблицу в базе данных. Каждый атрибут-поле — столбец, каждый объект класса — строка.

library/models.py:

from django.db import models


class Book(models.Model):
    title = models.CharField("Название", max_length=200)
    author = models.CharField("Автор", max_length=100)
    published = models.DateField("Дата издания")
    pages = models.PositiveIntegerField("Страниц", default=0)
    created = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ["title"]
        verbose_name = "книга"
        verbose_name_plural = "книги"

    def __str__(self):
        return self.title
  • Первый позиционный аргумент поля — человекочитаемое имя (verbose_name), его покажет админка.
  • Поле id (первичный ключ) Django добавит сам.
  • __str__ определяет, как объект выглядит в админке и консоли. Без него вы увидите безликое Book object (1).
  • class Meta — настройки модели: сортировка по умолчанию, названия.

Миграции

Модель описана, но таблицы в базе ещё нет. Миграции — файлы с инструкциями, как изменить структуру БД:

python manage.py makemigrations
Migrations for 'library':
  library/migrations/0001_initial.py
    + Create model Book

Посмотреть, какой SQL будет выполнен:

python manage.py sqlmigrate library 0001
CREATE TABLE "library_book" (
    "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
    "title" varchar(200) NOT NULL,
    ...
);

Применяем:

python manage.py migrate

Каждый раз, когда вы меняете модели (добавили поле, изменили тип), повторяйте пару makemigrations → migrate. Файлы миграций храните в git — так у всех разработчиков и на сервере будет одинаковая структура базы.

Не удаляйте миграции

Файлы в migrations/ — история изменений базы. Не удаляйте и не редактируйте применённые миграции без крайней необходимости.

Админ-панель

Админка — одна из «батареек» Django: готовый интерфейс для управления данными. Создадим администратора:

python manage.py createsuperuser

Запустите сервер и откройте http://127.0.0.1:8000/admin/. Вы увидите пользователей и группы, но не книги — модель нужно зарегистрировать.

Регистрация модели

library/admin.py:

from django.contrib import admin

from .models import Book

admin.site.register(Book)

Теперь можно добавлять, редактировать и удалять книги.

Настройка отображения

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    list_display = ["title", "author", "published", "pages"]   # колонки в списке
    list_filter = ["published", "author"]                      # фильтры справа
    search_fields = ["title", "author"]                        # строка поиска
    list_editable = ["pages"]                                  # редактировать прямо в списке
    date_hierarchy = "published"                               # навигация по датам
    ordering = ["-published"]

Декоратор @admin.register(Book) — то же самое, что admin.site.register(Book, BookAdmin).

Например, админка этого учебного сайта позволяет редактировать курсы, уроки и задания — с вложенными формами (inlines), о которых поговорим в проекте «Блог».

Итог

  • Модель — класс-наследник models.Model, поля — столбцы таблицы.
  • makemigrations создаёт миграции, migrate применяет их.
  • createsuperuser — администратор, admin.py — регистрация моделей.
  • ModelAdmin настраивает список: list_display, list_filter, search_fields.

Практика решено 0 из 6

Вы не вошли — ответы проверяются, но прогресс не сохранится. Войти или зарегистрироваться.
Задание 1 Написать код

Опишите модель Book с полями: title — строка до 200 символов, author — строка до 100 символов, published — дата (DateField). Добавьте метод __str__, возвращающий название.

Задание 2 Расставить по порядку

Вы добавили новую модель. Расставьте действия в правильном порядке.

  1. python manage.py makemigrations
  2. Открыть /admin/ и добавить первую запись
  3. python manage.py migrate
  4. Описать модель в models.py
  5. Зарегистрировать модель в admin.py
Задание 3 Один вариант ответа

Чем отличаются makemigrations и migrate?

Задание 4 Написать код

Зарегистрируйте модель Book в админке с помощью декоратора и настройте класс BookAdmin: в списке показывать поля title, author, published, добавить поиск по title.

Задание 5 Ввод ответа

Какой командой создаётся пользователь с доступом в админку?

Задание 6 Один вариант ответа

Как Django назовёт таблицу для модели Book из приложения library?

Войдите, чтобы отмечать пройденные уроки.