Продвинутый Django 5 для продолжающих

Прогресс по курсу:  0/193

2.1 Структура и поля моделей, создание проекта
5 из 5 шагов пройдено

Django ORM скрывает большую сложность при разработке веб-приложения. Объявление модели данных и шаблон запроса упрощены, тогда как за кулисами они структурированы по-другому. Данный раздел в блоге объяснит работу Django ORM (а не только преобразование кода Python в SQL), объявление модели, запросы (менеджер, набор запросов), поддержку нескольких драйверов, написание пользовательских запросов, миграции и т. д.
 

from django.db import models


class Employee(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)

Класс модели Employee является производным от models.Model. Наследование Model сигнализирует Django о том, что во время выполнения класс является моделью базы данных.

Модель (позже преобразованная в таблицу) содержит две дополнительные переменные класса first_name и last_name, которые будут двумя столбцами в таблице. Их тип указывается путем создания экземпляра соответствующего типа полей, здесь models.CharField.


Чтобы в дальнейшем, для взаимодействия с таблицей hr_employee можно было запустить команду shell_plus, которая идет в пакете django-extensions, установим этот пакет: 

pip install django-extensions


Обратите внимание, что Django предоставляет вам встроенную shell команду. Однако с shell_plus командой удобнее работать, например, она автоматически загружает определенные в проекте модели и отображает сгенерированный SQL.


Добавим django-extensions в файл settings.py:   

INSTALLED_APPS = [
    # ...
    'django_extensions',
    'hr',
]


Выполните миграцию с помощью команды:

python manage.py makemigrations

 


Добавим изменения в базу данных с помощью команды migrate:

python manage.py migrate


Django создает множество таблиц, в том числе для встроенных моделей, таких как User и Group. Но пока мы сосредоточимся на классе Employee.

Мы видим что таблица в БД заполнилась и создалась наша таблица hr_employee:

 

Откатить миграцию Django с помощью команды migrate

Чтобы отменить миграцию, мы можем использовать команду migrate, которую предоставляет нам файл manage.py.

Рассмотрим приложение Django hr и файлы миграции в папке migrations этого приложения. Пусть два файла миграции будут 0005_second_last_migration и 0006_last_migration; обратите внимание, что 0006 - это последняя примененная миграция.

Если нам нужно вернуться к миграции 0005 из миграции 0006, мы выполним следующую команду:

python manage.py migrate hr 0005

Или:

python manage.py migrate hr 0005_second_last_migration

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


Если нам нужно отменить все миграции приложения hr, мы воспользуемся следующей командой:

python manage.py migrate hr zero


Помните, что иногда миграция может быть необратимой. Как правило, это состояние возникает, когда в модели Django были внесены некоторые существенные изменения. Когда мы попытаемся вернуться к такой миграции, Django выдаст IrreversibleError.


Если нам нужно полностью очистить всю базу данных, мы можем использовать следующую команду: 

python manage.py flush

  • Комментария
Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

Чтобы в дальнейшем, для взаимодействия с hr_employee таблицей можно запустить команду shell_plus, которая идет из пакета django-extensions. Установим этот пакет:

Чтобы в дальнейшем, для взаимодействия с таблицей hr_employee  можно было запустить команду shell_plus, которая идет из пакета django-extensions , установим этот пакет: 

@Георгий_Тимофеев, да, так лучше, спасибо, исправил.

здесь нигде не сказано что нужно создавать модель 

 

объявление модели, запросы (менеджер, набор запросов), поддержку нескольких драйверов, написание пользовательских запросов, миграции и т. д.
 

from django.db import models


class Employee(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)

Класс модели Employee является производным от models.Model. Наследование Model сигнализирует Django о том, что во время выполнения класс является моделью базы данных.

@No_Name, да, действительно непонятно, выглядит просто как описание модели.

Опечатки:

  1. В тексте. Класс модели Emplo является производным от models.Model.
  2. В тексте. Чтобы в дальнейшем, дляя взаимодействия с hr_employee

@Sergei_Aleshin, спасибо, исправил.