Модели в Django описывают структуру используемых данных. Используемые в программе данные хранятся в базах данных, и с помощью моделей как раз осуществляется взаимодействие с базой данных.
При создании приложения по умолчанию в его каталог добавляется файл models.py, который применяется для определения моделей. Модель представляет класс, унаследованный от django.db.models.Model.
Так, изменим файл models.py следующим образом:
from django.db import models class Person(models.Model): name = models.CharField(max_length=20) age = models.IntegerField()
Здесь определена простейшая модель, которая называется Person и которая представляет человека. В модели определены два поля. Поле
name представляет тип CharField
- текстовое поле, которое хранит последовательность символов. Оно будет хранить имя человека. Для CharField
обязательно надо указать параметр max_length
, который задает максимальную длину хранящейся строки. И поле age представляет тип IntegerField
- числовое поле, которое хранит целые числа. Оно предназначено для хранения возраста человека.
Каждая модель сопоставляется с определенной таблицей в базе данных. Однако пока у нас нет в бд таблицы, которая хранит объекты модели Person. И в этом случае нам надо создать и выполнить миграцию. Миграция преобразует базу данных в соответствии с определением моделей.
Вначале необходимо создать миграцию с помощью команды
python manage.py makemigrations
После этого в приложении в папке migrations мы обнаружим новый файл, который будет иметь примерно следующее содержимое:
from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ ] operations = [ migrations.CreateModel( name='Person', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=20)), ('age', models.IntegerField()), ], ), ]
Это и есть миграция. Здесь можно заметить, что создается не два, а три поля - поле id, которое будет представлять первичный ключ, добавляется по умолчанию. Поэтому в приниципе в самой модели нам не нужно явным образом определять какой-либо идентификатор.
Теперь надо выполнить данную миграцию. Для этого выполняется команда
python manage.py migrate
После этого, если мы откроем базу данных db.sqlite3, которая есть в проекте, то мы увидим, что в нее добавлена таблица для хранения данных модели Person:
Стоит учитывать, что в процессе работы над проектом определение модели может меняться - к ней могут добавляться новые поля, либо могут удаляться уже существующие, либо могут добавляться новые модели, данные которых мы также захотим хранить в базе данных. И в этом случае опять надо создавать миграцию и применять ее к базе данных, чтобы база данных была синхронизирована с определением моделей.