Сохраните модели в зарегистрированном Django-приложении, выполните makemigrations для создания файла и migrate для применения. Перед применением просмотрите план.
Генерация миграции после внедрения новых моделей в Django
Сохраните модели в зарегистрированном Django-приложении, выполните makemigrations для создания файла и migrate для применения. Перед применением просмотрите план.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо добавить две новые модели в приложение Django — PrepLevel и AcademicCourse. Первая модель будет хранить информацию об уровне подготовки, вторая — о курсах, включая код с проверкой формата, название специальности и профилей. После создания моделей следует выполнить миграцию, чтобы изменения отразились в базе данных.
from django.db import models
from django.core.validators import RegexValidator
# код, специальность, профили, уровень подготовки
class PrepLevel(models.Model):
level = models.TextField()
class AcademicCourse(models.Model):
code = models.CharField(
max_length=8,
validators=[
RegexValidator(
regex=r'^\d{2}\.\d{2}\.\d{2}$',
message='Строка должна быть в формате "01.03.02".'
)
]
)
speciality = models.TextField()
profs = models.TextField()
level = models.ForeignKey(
PrepLevel,
verbose_name='Уровень подготовки',
on_delete=models.CASCADE,
related_name='courses'
)
Ответ
Сохраните модели в зарегистрированном Django-приложении, выполните makemigrations для создания файла и migrate для применения. Перед применением просмотрите план.
Для приложения с условным именем courses:
python manage.py makemigrations courses
python manage.py sqlmigrate courses 0001
python manage.py migrate --plan
python manage.py migrate
0001 замените именем реально созданной миграции. Убедитесь, что приложение находится в INSTALLED_APPS, а команда работает с нужным окружением и БД. makemigrations не создаёт таблицы само по себе.
RegexValidator проверяется формами/сериализаторами или явным full_clean, но обычный save() автоматически его не вызывает. Для строгой проверки на уровне БД нужен соответствующий constraint. CASCADE удалит курсы при удалении PrepLevel; если это нежелательно, заранее выберите PROTECT.