Вы прочитали 3 из 3 бесплатных методичек сегодня
Безлимит →
Экстракт 31 августа 2018

Научитесь проектировать базы данных, управлять миграциями и работать с ORM в Django

Corey Schafer · Corey Schafer Верифицирован 38:46

Разработка серверной части веб-приложений для начинающих Python-разработчиков за 40 минут.

⚡ Зачем читать

  • Вы перестанете бояться SQL и научитесь управлять данными через понятные Python-классы.
  • Вы поймете, как связывать пользователей с контентом и автоматически обновлять структуру базы без ручного написания миграций.
  • Вы освоите профессиональную работу с админ-панелью, превращая технические таблицы в удобный графический интерфейс для управления контентом.
9 тезисов 4 задания 2 цитаты ⏱ 17 мин чтения 🎯 9 тезисов
YouTube Транскрипт Сохранить
Поделиться: TG WA VK X

Для AI-агентов и LLM

Экстракт доступен в структурированном Markdown. Скачать .md · JSON API · Site index

💡 Ключевые тезисы (9)

1 Спроектируйте архитектуру базы данных через модели #
Используйте встроенный ORM для описания структуры таблиц в файле models.py. Это превращает концептуальную модель данных в реальные SQL-таблицы без необходимости писать SQL-запросы вручную.
2 Определите поля модели #
Примените CharField, TextField и DateTimeField для создания структуры поста. Установка аргументов типа max_length или default позволяет настроить ограничения на уровне базы данных.
3 Установите связи между моделями #
Используйте ForeignKey для реализации отношения 'один-ко-многим' между пользователями и постами. Добавьте on_delete=models.CASCADE, чтобы обеспечить целостность данных при удалении автора.
4 Выполните миграции базы данных #
Запустите команды 'makemigrations' и 'migrate', чтобы синхронизировать изменения в Python-коде с физической структурой базы данных. Это позволяет безопасно менять схему данных в процессе разработки.
5 Протестируйте запросы через Django Shell #
Используйте интерактивную оболочку для проверки создания, фильтрации и получения объектов. Это лучший способ отладки логики ORM в реальном времени.
6 Реализуйте метод __str__ #
Добавьте магический метод __str__ в модель, чтобы объекты в консоли и админ-панели отображались с понятными заголовками вместо технических строк.
7 Интегрируйте реальные данные в шаблоны #
Замените статические словари на динамические запросы Post.objects.all() в представлениях. Это наполнит ваш сайт данными из реальной базы.
8 Настройте форматирование даты #
Используйте встроенные фильтры шаблонов Django для преобразования сложных объектов даты в читаемый вид прямо в HTML-коде.
9 Зарегистрируйте модели в административной панели #
Добавьте модели в admin.py, чтобы получить готовый графический интерфейс для управления контентом без написания дополнительного кода для администратора.

Проектирование баз данных и ORM в Django

🗺 Карта навыков

Уровень Навык Инструмент
Базовый Создание моделей данных models.Model
Базовый Миграции базы данных makemigrations, migrate
Средний Связи и отношения ForeignKey, CASCADE
Средний ORM-запросы QuerySet, filter, all
Продвинутый Магические методы __str__

1. Проектирование архитектуры базы данных через модели

Введение в Django ORM начинается с понимания того, что база данных — это не просто набор таблиц, а живой организм вашего приложения. Corey Schafer подчеркивает, что ORM (Object Relational Mapper) позволяет работать с данными как с обычными объектами Python. Это означает, что вам не нужно быть экспертом в SQL, чтобы создать сложную структуру. Вместо написания CREATE TABLE вы описываете класс в файле models.py. Это делает ваш код переносимым: вы можете разрабатывать на SQLite, а при запуске на сервере переключиться на PostgreSQL, не меняя ни строчки логики.

В видео спикер создает модель Post. Для этого он наследует класс от models.Model. Каждый атрибут класса превращается в колонку таблицы. Например, title = models.CharField(max_length=100) создает текстовое поле с ограничением в 100 символов, а content = models.TextField() дает неограниченное пространство для статьи. Важным аспектом является date_posted. Кори показывает разницу между auto_now и default=timezone.now. Он рекомендует использовать именно default=timezone.now без скобок, так как это передает сам объект функции времени, а не результат ее выполнения в момент загрузки файла.

Особое внимание уделяется связи «один-ко-многим». В блоге один пользователь может написать много постов, но у поста всегда один автор. Для этого используется models.ForeignKey(User, on_delete=models.CASCADE). Параметр CASCADE гарантирует, что если вы удалите пользователя, все его статьи автоматически исчезнут из базы, что критически важно для целостности данных.

"The great thing about the django ORM is that we can represent our database structure as classes and you'll hear those classes be called models and doing the database structure this way is actually very intuitive after you get the hang of it. This saves us a ton of time and a lot of effort if we had to write that SQL ourselves and really it made it so that we didn't even need to know SQL to work with this database."

Сделайте сейчас: откройте файл models.py в вашем приложении и создайте класс Post. Добавьте поля: title, content, date_posted (с использованием django.utils.timezone) и author (связь с User). Убедитесь, что вы правильно импортировали модель User. После этого выполните команды python manage.py makemigrations и python manage.py migrate в консоли. Проверьте созданный файл миграции, чтобы увидеть, как Django автоматически перевел ваш Python-код в SQL-структуру.

2. Работа с данными в интерактивной оболочке Django Shell

Когда модель создана, возникает вопрос: как проверить, правильно ли она работает, не создавая полноценные представления (views)? Corey Schafer предлагает использовать python manage.py shell. Это мощный инструмент, который позволяет взаимодействовать с вашей базой данных «на лету». Здесь вы можете создавать, фильтровать, удалять объекты и видеть результат сразу. Это идеальное место для обучения и отладки сложных запросов.

В интерактивной сессии Кори демонстрирует, как получать данные. Он вызывает User.objects.all(), чтобы увидеть всех пользователей. Затем он использует filter(username='CoreyMS'), чтобы найти конкретного автора. Очень важно понимать, что результат фильтрации — это QuerySet (список объектов), поэтому, чтобы получить один объект, нужно использовать метод .first() или .get(). Создание поста также интуитивно: вы создаете экземпляр класса post = Post(title='Заголовок', content='Контент', author=user), а затем обязательно вызываете метод post.save(). Без вызова save() данные останутся только в оперативной памяти и не попадут в базу.

Кори также акцентирует внимание на методе __str__. По умолчанию, если вы просто распечатаете объект в консоли, он будет выглядеть как <Post: Post object (1)>. Это неудобно. Добавление метода def __str__(self): return self.title меняет все: теперь в консоли и админке вы видите понятные заголовки постов. Это «магический метод», который Django использует для строкового представления объекта.

Наконец, спикер показывает, как обращаться к связанным данным. Если у вас есть объект поста, вы можете легко получить данные автора, обратившись к post.author.email или post.author.username. Это работает благодаря ForeignKey. Также крутая фишка Django — обратная связь: user.post_set.all() позволяет получить все посты конкретного автора, даже если в модели Post вы не прописывали связь со стороны пользователя. Это делает навигацию по данным крайне гибкой и быстрой.

"I think that's a pretty good overview of the database queries that we can make now I know that that's a lot to take in so if you need to go back and re-watch that section a couple of times then it might take a while for some of that to sink in. The Django ORM lets us do this through the classes as well so to illustrate this I'm going to run the Django Python shell."

Сделайте сейчас: запустите python manage.py shell. Импортируйте вашу модель Post и модель User. Найдите любого существующего пользователя и создайте для него два поста через методы create или обычное присваивание с последующим save(). Обязательно добавьте метод __str__ в модель Post, чтобы при выводе Post.objects.all() в консоли вы видели заголовки ваших постов. Попробуйте получить доступ к email автора через объект поста, чтобы убедиться, что связь ForeignKey работает корректно.


3. Динамическая подстановка данных и форматирование даты в шаблонах

Когда база данных настроена и заполнена, наступает время соединить ORM с пользовательским интерфейсом. В предыдущих уроках вы использовали статические словари, но настоящий веб-разработчик знает: контент должен «дышать» данными из БД. Corey Schafer показывает, как заменить «заглушки» на реальные объекты Post. В файле views.py вы импортируете модель from .models import Post и в функции представления вместо списка словарей вызываете Post.objects.all(). Это возвращает QuerySet, который Django автоматически умеет итерировать в HTML-шаблонах через цикл {% for post in posts %}. Важно понимать, что при этом не нужно менять структуру шаблона, если имена полей в модели (например, title, content) совпадают с ключами, которые вы использовали в словарях.

Однако работа с данными часто требует их визуального оформления. Вы заметите, что стандартный вывод datetime из базы данных выглядит громоздко — он содержит точное время с секундами, что редко нужно читателю блога. Django предлагает мощную систему фильтров. Спикер демонстрирует, как с помощью вертикальной черты | применить форматирование прямо в шаблоне: {{ post.date_posted|date:"F d, Y" }}. Это превращает объект даты в строку "August 28, 2018". Обратите внимание на важность документации: Кори подчеркивает, что нет смысла заучивать все коды форматирования (например, F для полного месяца, d для дня, Y для года), их всегда стоит подсматривать в официальном руководстве Django, так как они специфичны для системы шаблонизатора.

Более того, Кори акцентирует внимание на очистке кода. Как только вы переходите на Post.objects.all(), все старые переменные с жестко заданными списками словарей в представлениях становятся лишними. Удаление «мертвого» кода — признак профессионализма. Это делает ваш файл views.py чище и легче для поддержки. Ваша задача — убедиться, что контекстный словарь, который вы передаете в render, корректно связывает ключ posts с результатом ORM-запроса.

"Instead of using that dummy data let's instead run a query on our post model and pass in all of that data instead. As long as those dictionary keys were the same names as our database fields then we shouldn't have to change anything it should have just worked."

Сделайте сейчас: перейдите в ваш файл views.py. Удалите список словарей с тестовыми данными. Импортируйте модель Post и в функции отображения главной страницы передайте в контекст Post.objects.all(). Запустите сервер командой python manage.py runserver, откройте браузер и убедитесь, что ваши посты отобразились. Затем откройте home.html и добавьте фильтр |date:"F d, Y" к полю date_posted, чтобы убедиться, что формат даты изменился на читабельный.

4. Интеграция с административной панелью Django

Финальный штрих в управлении данными — это «волшебная» админ-панель Django. Corey Schafer отмечает, что многие новички забывают: создание модели в коде не означает, что она автоматически появится в интерфейсе администратора. Чтобы Django «увидел» ваши таблицы, их нужно зарегистрировать. Это делается в файле admin.py, который находится в папке вашего приложения. Это критически важный шаг, так как административная панель Django — это не просто инструмент для просмотра таблиц, а полноценная CMS, созданная для того, чтобы вы не тратили время на написание админки с нуля.

Спикер показывает, как импортировать модель и вызвать admin.site.register(Post). После этого в интерфейсе /admin автоматически появляется секция «Blog» с ссылкой на «Posts». Что делает это решение гениальным, так это автоматическая генерация формы редактирования. Вам не нужно писать HTML-формы, валидацию или логику сохранения: Django анализирует типы полей (CharField, TextField, ForeignKey) и создает соответствующие виджеты: текстовые поля, области для ввода текста и выпадающие списки (select) для выбора автора. Например, если вы редактируете пост, поле author превратится в выпадающий список со всеми существующими пользователями, что предотвращает ошибки ввода.

Кори также демонстрирует мощь связности: при редактировании поста вы можете сменить автора на другого пользователя из списка. После нажатия кнопки «Save» изменения мгновенно отражаются на сайте, потому что админ-панель работает с той же самой базой данных, что и ваше приложение. Это наглядно показывает принцип DRY (Don't Repeat Yourself): один раз описав структуру данных в models.py, вы получаете не только API для работы с данными, но и готовый графический интерфейс для управления ими. Это позволяет делегировать управление контентом пользователям или менеджерам, которые не знают Python и не имеют доступа к коду проекта.

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


5. Понимание миграций: как Django управляет эволюцией базы данных

Миграции — это «система контроля версий» для вашей базы данных. В Django этот процесс реализован максимально прозрачно, что позволяет разработчику фокусироваться на логике, а не на ручном написании SQL-скриптов ALTER TABLE. Кори Шефер уделяет этому особое внимание, объясняя, что команда python manage.py makemigrations — это процесс «снимка» вашего текущего состояния моделей. Когда вы добавляете, удаляете или меняете поля в models.py, Django сравнивает текущий код с предыдущим состоянием и создает файл миграции, который содержит инструкции по обновлению структуры. Этот файл лежит в папке migrations внутри вашего приложения и представляет собой обычный Python-код. Крайне важно понимать, что миграции — это не просто запись в журнал, а исполняемые операции. Вы можете открыть файл 0001_initial.py и увидеть, как именно Django создает таблицу, назначает primary_key и настраивает связи ForeignKey. Это дает вам полный контроль над тем, как именно будет выглядеть ваша база данных на выходе.

Кори также демонстрирует важный инструмент для отладки — команду python manage.py sqlmigrate [app_name] [migration_number]. Она позволяет увидеть «под капотом» тот самый SQL-код, который Django сгенерирует для конкретной миграции. Например, для SQLite это будет привычный CREATE TABLE, но при переходе на PostgreSQL или MySQL Django автоматически адаптирует синтаксис под особенности конкретной СУБД. Это избавляет от необходимости переписывать код приложения при смене базы данных. Ваша главная задача как разработчика — следить за тем, чтобы миграции были последовательными. Никогда не редактируйте файлы миграций вручную, если только вы точно не понимаете, что делаете, так как это нарушит «цепочку доверия» Django к истории вашей базы данных.

Когда вы выполняете python manage.py migrate, Django применяет все накопленные изменения к базе данных. Если в таблице уже есть данные, миграции справляются с этим корректно, сохраняя целостность записей. Спикер подчеркивает, что этот механизм делает разработку итеративной: вы можете начать с простой модели и постепенно «наращивать» её полями, не опасаясь потерять информацию или повредить структуру. Это делает Django идеальным инструментом для быстрого прототипирования и долгосрочной поддержки сложных проектов, где структура данных может меняться месяцами или годами.

"The make migrations command made these files for what it will do and the migrate command will actually run these. Migrations are useful because it allows us to make changes to our database even after it's created and has data in that database."

Сделайте сейчас: добавьте новое поле в вашу модель Post, например, subtitle (CharField с ограничением длины). Выполните команду python manage.py makemigrations и посмотрите, какой файл был создан. Затем используйте python manage.py sqlmigrate blog [номер_вашей_миграции], чтобы увидеть SQL-запрос ALTER TABLE. После этого примените изменения командой python manage.py migrate. Зайдите в админ-панель и убедитесь, что в форме создания поста появилось новое поле.

6. Связи моделей и работа с обратными отношениями

Одной из самых сильных сторон Django является легкость, с которой можно связывать таблицы. Мы уже разобрали ForeignKey, но важно осознать мощь обратных связей. Когда вы связываете модель Post с User, Django не просто создает колонку author_id. Он автоматически добавляет в модель User механизм доступа к постам автора через «обратное отношение» (reverse relationship). Кори показывает, что стандартное имя для доступа к таким объектам — это название связанной модели в нижнем регистре плюс суффикс _set. То есть, имея объект user, вы можете обратиться к user.post_set.all(), чтобы получить все посты, написанные этим автором.

Это работает на лету, даже если вы не прописывали related_name в модели. Спикер демонстрирует, что это не просто удобный способ получения данных, а полноценный QuerySet. Это означает, что к user.post_set можно применять любые методы фильтрации, сортировки или ограничения: user.post_set.filter(title__contains='Python') или user.post_set.count(). Такая архитектура избавляет от необходимости писать тяжелые SQL JOIN-запросы вручную. Все это инкапсулировано внутри ORM, обеспечивая высокую производительность и читаемость кода. Кори также показывает «магический» метод .create() у этого отношения: user.post_set.create(title='...', content='...'). При использовании этого метода Django автоматически заполняет поле author, что делает код лаконичным и надежным.

Понимание этих связей критично для построения масштабируемых систем. Когда вы проектируете базу данных, всегда думайте о том, как объекты будут взаимодействовать друг с другом. Нужно ли вам удалять все посты при удалении пользователя? Здесь на помощь приходит on_delete=models.CASCADE. Это не просто настройка, это бизнес-логика, прописанная в структуре базы. Если вы выберете models.SET_NULL (и разрешите null=True), то при удалении автора посты останутся в базе, но станут «авторскими сиротами», что может быть полезно в других сценариях. Изучение этих тонкостей — прямой путь к статусу продвинутого Django-разработчика, способного проектировать системы с высокой степенью связности и целостности.

"Django also adds a special query set to the user model that allows us to do this a lot more easily and the naming convention for this query set is the name of the related model then underscore set. This is a really nice feature that we're able to get that extra information from that foreign key like that."

Сделайте сейчас: в python manage.py shell получите любого пользователя. Попробуйте вывести количество его постов через user.post_set.count(). Затем создайте новый пост для этого же пользователя, используя метод user.post_set.create(title='Новый пост', content='Пример обращения'). Проверьте, что пост действительно сохранился в базе, вызвав user.post_set.all(). Попробуйте удалить этот пост через метод .delete() на самом объекте поста и убедитесь, что количество постов у пользователя изменилось.


7. Динамические шаблоны и фильтрация даты: оживляем интерфейс

Теперь, когда наша база данных заполнена реальными записями, пришло время заменить статические данные в наших шаблонах (HTML-файлах) на динамический контент. В видео Кори показывает, как легко передать QuerySet из представления (view) в шаблон. Ранее мы использовали posts = [...] — список словарей, захардкоженный прямо в Python-коде. Теперь мы просто импортируем from .models import Post и в функции-представлении вызываем Post.objects.all(). Этот метод возвращает QuerySet, который Django автоматически «распаковывает» внутри шаблона. Важно понимать, что обращение к полям модели в шаблоне происходит через точечную нотацию: {{ post.title }}, {{ post.content }} и так далее. Это невероятно удобно, так как синтаксис шаблонизатора Jinja-подобного движка Django интуитивно понятен даже верстальщикам без глубоких знаний Python.

Отдельного внимания заслуживает работа с датами. При выводе объекта DateTimeField в шаблон «как есть», Django отображает его в формате, который может быть неудобен для пользователя (например, с точностью до секунды или в формате ISO). Кори демонстрирует мощь «фильтров шаблонов». Используя конструкцию {{ post.date_posted|date:"F d, Y" }}, мы можем на лету менять представление данных. Символ вертикальной черты (|) говорит Django применить фильтр date к нашему объекту. Аргумент в кавычках — это строка форматирования, где F отвечает за полное название месяца, d за день, а Y за год. Спикер настоятельно рекомендует всегда обращаться к официальной документации по форматам дат, так как запомнить все комбинации невозможно, а правильное отображение данных критически влияет на UX (пользовательский опыт). Это пример того, как Django берет на себя рутину, позволяя разработчику фокусироваться на представлении контента.

Более того, использование QuerySets открывает двери для мощной фильтрации. Вы можете не просто выводить все посты, а, например, отсортировать их по дате публикации: Post.objects.all().order_by('-date_posted'). Знак минуса перед именем поля означает обратный порядок (от новых к старым). Такая гибкость позволяет создавать ленты новостей, топы постов или архивы без необходимости писать сырые SQL-запросы. Кори подчеркивает: если вы видите, что ваш код в шаблонах становится слишком сложным, лучше вынести логику сортировки или выборки на уровень представлений (views.py). Это поддерживает архитектуру MVC (или MTV в случае Django), где данные, логика и визуализация четко разделены.

"The template filters are a powerful way to change how our data is displayed without altering the actual data in the database. Using the date filter allows us to format our timestamps into human-readable strings, which is essential for any professional-looking blog or web application."

Сделайте сейчас: В вашем представлении home измените выборку так, чтобы посты выводились в обратном хронологическом порядке, используя .order_by('-date_posted'). В шаблоне home.html примените фильтр date к полю date_posted, чтобы дата отображалась в формате "День. Месяц. Год" (например, 25.10.2023). Убедитесь, что изменения корректно отображаются в браузере после перезагрузки сервера.

8. Безопасность и масштабируемость: почему ORM — это стандарт индустрии

Завершая изучение основ работы с данными, важно осознать, почему профессионалы выбирают Django ORM вместо написания SQL-запросов вручную. Главная причина — безопасность. Когда вы используете Post.objects.all(), Django автоматически генерирует защищенные SQL-запросы, которые исключают возможность SQL-инъекций. При ручном написании SQL-запросов разработчики часто забывают экранировать ввод, что открывает двери для злоумышленников. В Django этот слой защиты включен по умолчанию. Кроме того, ORM позволяет легко менять СУБД. Кори упоминает, что вы можете использовать SQLite для разработки (потому что это просто файл) и PostgreSQL для продакшена (потому что это мощная серверная база). Весь ваш код останется неизменным, так как Django сам адаптирует SQL-диалекты под выбранную СУБД.

Второй аспект — это «отложенная загрузка» (Lazy Loading). Когда вы пишете posts = Post.objects.all(), Django не идет в базу данных немедленно. Он формирует объект QuerySet, который будет выполнен только тогда, когда вы начнете перебирать его в цикле for в шаблоне. Это позволяет строить сложные цепочки фильтров и условий, не нагружая базу данных лишними запросами. Однако, будьте осторожны: если вы попытаетесь получить post.author для каждого поста в цикле, возникнет проблема N+1 (один запрос на список постов и N запросов на каждого автора). Для таких случаев Django предоставляет метод select_related, который делает JOIN в одном запросе. Кори призывает изучать такие оптимизации, как только вы почувствуете уверенность в базовых операциях.

Наконец, админ-панель Django — это не просто «костыль» для разработчика, а готовый инструмент для клиента. Когда вы регистрируете модель, вы создаете полноценную систему управления контентом (CMS). Вы можете делегировать создание постов контент-менеджерам, не боясь, что они сломают код. Это экономит недели разработки. Ваша работа как архитектора сводится к описанию моделей в models.py, а Django берет на себя заботу о безопасности, валидации форм и интерфейсе. Это и есть та самая магия, которая делает фреймворк выбором номер один для стартапов и крупных энтерпрайз-проектов.

"Django ORM is not just a shortcut, it is a robust security layer that protects your application from vulnerabilities. By abstracting the database interaction, Django allows us to focus on building features rather than wrestling with SQL syntax, making our code cleaner and more maintainable."

Сделайте сейчас: Попробуйте в оболочке python manage.py shell получить все посты автора с id=1 и вывести их заголовки. Затем попробуйте обновить один из этих постов, изменив его title, и сохраните результат через .save(). Проверьте изменения в админ-панели. Это закрепит понимание жизненного цикла объекта: выборка -> модификация -> сохранение.

🏋️ Практикум

  1. Добавьте в модель Post поле is_published (тип BooleanField, default=True). Примените миграции.
  2. Создайте в shell 5 новых постов программно, используя цикл for и метод .create().
  3. Отфильтруйте в shell только те посты, где в title встречается слово "Python".
  4. Используя метод .update(), поменяйте автора у всех постов, которые были созданы до текущей даты, на другого существующего пользователя.
  5. Настройте ModelAdmin в admin.py, добавив list_display = ('title', 'author', 'date_posted') и list_filter = ('date_posted', 'author') для более удобного управления в админке.
  6. Удалите один из постов через shell и проверьте, остался ли соответствующий пользователь в базе (подсказка: on_delete=models.CASCADE).
  7. Попробуйте сменить формат даты в шаблоне на "Часы:Минуты", чтобы увидеть время создания постов.
🔒

Бесплатный лимит исчерпан

Вы прочитали 3 методичек сегодня. Завтра лимит обновится, или подпишитесь для неограниченного доступа.

🏋️ Практикум

0 / 4 выполнено

Создание модели Post

⏱ 15 мин 🎯 Цель: Создать структуру данных блога. Шаги: 1. Откройте models.py. 2. Создайте класс Post с полями title, content, date_posted и author. 3. Настройте связь ForeignKey к встроенной модели User. ✅ Результат: Файл models.py с описанной структурой поста.

Применение миграций

⏱ 5 мин 🎯 Цель: Обновить базу данных. Шаги: 1. Выполните 'python manage.py makemigrations'. 2. Запустите 'python manage.py migrate'. 3. Проверьте SQL-код через 'sqlmigrate'. ✅ Результат: Реальные таблицы в файле db.sqlite3.

Интерактивная работа с данными

⏱ 10 мин 🎯 Цель: Закрепить навыки работы с ORM. Шаги: 1. Откройте shell. 2. Создайте 3 поста через методы .create() и .save(). 3. Проверьте связь пользователя с постами через user.post_set. ✅ Результат: Наполненная тестовыми данными БД.

Регистрация моделей в админке

⏱ 5 мин 🎯 Цель: Получить удобный интерфейс управления. Шаги: 1. Откройте admin.py. 2. Импортируйте модель Post. 3. Зарегистрируйте её с помощью admin.site.register. ✅ Результат: Модель Post доступна для редактирования в браузере.
🎉
Все задания выполнены!
Отлично — знания превращены в навыки

💬 Цитаты (2)

«Django ORM — это объектно-реляционное отображение, которое позволяет работать с базой данных в удобном объектно-ориентированном стиле. Главное преимущество в том, что вы можете использовать разные базы данных, например, SQLite для тестов и Postgres для продакшена, не меняя при этом основной код запросов.» #

Разъяснение концепции ORM как инструмента для абстракции базы данных.

«Миграции невероятно полезны, потому что позволяют вносить изменения в структуру базы данных даже тогда, когда в ней уже содержатся данные. Это избавляет от написания сложных SQL-скриптов вручную.» #

Обоснование необходимости системы миграций для поддержки проекта.

Похожие по теме

Читать далее

Мастерство управления Python-проектами: ускоряем рабочий процесс с помощью UV

Corey Schafer

Мастерство управления Python-проектами: ускоряем рабочий процесс с помощью UV

Corey Schafer

Понравился экстракт?
Подписывайтесь — лучшие материалы каждую неделю.
Telegram Дайджест →

Поделитесь с коллегами

Telegram ВКонтакте X / Twitter
Открыть в Telegram

Экстракт Знаний в Telegram

Экстракты и дистилляты из лучших YouTube-каналов — сразу после публикации.

Подписаться

Дайджест Экстрактов

Лучшие методички за неделю — каждый понедельник