Базы данных в проектах на Django похожи на таблицы Excel, но отличие заключается в том, что тип данных для каждого столбца и их количество определяется заранее. При попытке внести в колонку данные не того типа получим ошибку и данная операция не будет выполнена.
Количество колонок, их имя и тип вносимых данных являются параметрами структуры базы данных. Изменение структуры и внесение данных в базу называется миграцией базы данных.
Работу с базой данных рассмотрим на примере проекта MySite из предыдущей статьи.
1. Миграция базы данных
Файл базы данных db.sqlite3 создаётся вместе с проектом, но в нём нет ни структуры, ни данных. Первая миграция вносит служебную информацию для добавления в будущем пользователей. Нас интересует создание суперпользователя для дальнейшей разработки сайта с помощью панели администратора.
Перейдём в папку с файлом manage.py введя "cd projectMySite" и произведём миграцию базы данных командой "python manage.py migrate" в терминале.
2. Создаём суперпользователя и заходим в панель администратора
Создаём суперпользователя (администратора) в терминале командой "python manage.py createsuperuser". Имя пользователя, например "admin123". Адрес электронной почты "admin123@mysite.com". Пароль: "admin123" и подтверждаем пароль, вводя его ещё раз: "admin123".
В данной статье имя и пароль суперпользователя, а также email учебные. После ввода пароля второй раз может появиться предупреждение информирующее вас о слишком простом пароле. Вы можете проигнорировать его введя "y" или ввести новый пароль введя "n".
Запустим сервер и перейдём по ссылке в терминале к странице нашего сайта, кликая на неё с нажатой клавишей Ctrl. Перейдём к панели администратора сайта, добавив "/admin" в адресную строку.
Вводим имя пользователя admin123 с паролем admin123 и переходим в панель администратора сайта.
3. Разработка сайта в панели администратора
Панель администратора сайта является интерфейсом для работы с базой данных. При первом входе мы видим только раздел базы данных пользователей сайта. Учётные записи пользователей можно объединять в группы, удалять, добавлять, изменять их параметры. Разделы базы данных и описание их полей производят в файле models.py, а сами данные вносят в базу построчно через панель администратора.
Остановим сервер и выберем русский язык для панели администрирования в файле settings.py, изменив значение параметра LANGUAGE_CODE с 'en-us' на 'ru'. Сохраняем файл комбинацией клавиш Ctrl+S.
Добавим ещё один раздел базы данных "Городах Сибири" с полями о численности их населения и области или крае, в котором они находятся. Для этого в приложении AppMySite откроем файл models.py и добавим класс SitiesOfSiberia и опишем поля nameOfSity, locationOfSity и sizeOfSity. Максимальная длина строки max_length, а blank=false значит, что поле не должно быть пустым. Не забываем сохранять изменения в файле.
class SitiesOfSiberia(models.Model):
nameOfSity = models.CharField(max_length=20, blank=False)
locationOfSity = models.CharField(max_length=40, blank=False)
sizeOfSity = models.IntegerField(default=0)
Раздел в панели администрирования или класс в models.py называется моделью базы данных. Зарегистрируем модель в файле admin.py для её отображения в панели. Произведём импорт класса
"from AppMySite.models import SitiesOfSiberia"
и регистрируем в панели раздел
"admin.site.register(SitiesOfSiberia)".
В терминале перейдём в папку projectMySite командой "cd projectMySite". Создадим файл миграций "python manage.py makemigrations" и произведём миграцию в базу данных "python manage.py migrate".
Запустим сервер, откроем панель администратора. Видим русифицированную панель и новый раздел Sities of Siberias.
В списке "Последние действия" видно, что в базу был добавлен город Барнаул. Кликнув по "+Барнаул Алтайский край" в этом списке, перейдём в меню настройки параметров записи об этом городе.
Из рисунка выше видны возможные варианты действий. Изменим численность города с 1 на 623057. Внесём число в поле sizeOfCity и нажмём кнопку СОХРАНИТЬ. Изменения внесены в базу данных.
После сохранения изменений в записи города, автоматически открывается меню списка городов. Список городов открывается, если кликнуть по "Sities of siberias" в разделе моделей приложения APPMYSITE в главном меню панели. Для добавления нового города в список нажмём "ДОБАВИТЬ SITIES OF SIBERIA +". При этом откроется такое же меню записи, как и для Барнаула, но с пустыми полями. Добавим город Кемерово.
Сохранить город с не указанной локацией или без имени не выйдет из-за параметра blank=false в файле models.py.
Из списка видно номер каждого объекта в базе данных "Города Сибири", но не видно его названия. Для возвращения имени объекта из поля nameOfSity базы данных нужно в файле models.py добавить метод "def __str__(self): return self.nameOfSity" к классу SitiesOfSiberia. После сохранения файла сервер автоматически перезапуститься, а изменения отобразятся после обновления страницы панели.
Отобразить название самого списка можно, добавив класс в файле admin.py
class Meta: # Параметры класса
verbose_name = str("Города Сибири") # имя класса
verbose_name_plural = str("Города Сибири") # имя во множественном числе
Отобразить название раздела панели можно, добавив строчку в файле apps.py
verbose_name = 'Города России' # Название приложения в панели
Для отображения полей в списке городов добавим класс в admin.py
class SitiesOfSiberiaAdmin(admin.ModelAdmin):
list_display = ('id','nameOfSity','locationOfSity','sizeOfSity')
А также зарегистрируем этот класс в функции ниже, добавив её название вторым параметром.
Имя поля в списке городов добавляется через параметр verbose_name в файле models.py
Если кликнуть по имени одного из полей, то записи городов отсортируются по этому полю. Например, ниже города отсортированы по названию.
В файле admin.py можно настраивать параметры внешнего вида разделов панели администрирования.
Оценим внешний вид списка в панели после внесённых изменений в настройки
Как видим, появилась возможность редактировать и сохранять записи списка. Кроме того, теперь есть возможность искать города по названию и локации, а справа появилось боковое меню для фильтрации записей по указанным полям.
Теперь добавим новый список городов "Города Европейской части" и добавим в него города Москву и Санкт-Петербург. Для этого в файле models.py создадим класс SitiesOfEurope аналогичный классу SitiesOfSiberia, но в подклассе Meta укажем своё название "Города Европейской части".
Теперь в файле admin.py импортируем класс SitiesOfEurope и зарегистрируем его в панели, а также укажем настройки нового списка городов в подклассе SitiesOfEuropeAdmin. Он аналогичен подклассу SitiesOfSiberiaAdmin.
Смотрим итог работы.
Но зайти в новый список мы не сможем. В базе данных не отражены изменения её конфигурации. Подготовим файл миграции и произведём её в терминале:
"cd projectMySite"
"python manage.py makemigrations"
"python manage.py migrate"
Теперь добавим данные через панель как делали для предыдущего списка.
Дорогой читатель, если вы добрались до конца статьи, я вас поздравляю! Извините, но в двух словах никак не вышло. Это, конечно, далеко не всё по базам данных, но давайте завершим на этом первое и "лёгкое" знакомство с панелью администрирования фреймворка Django.
Остались силы и желание работать дальше? Тогда перейдём к следующей статье "Работа с шаблонами сайта на Django", но чуть позже. Статья в разработке. Подпишитесь на канал, чтобы не терять полезную информацию!