Как задать произвольную дату создания для миграции в Django

«Как задать произвольную дату создания для миграции в Django» — вопрос из категории Django, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Django можно переопределить метаданные миграции, включая дату её создания. Это делается путем добавления атрибута created в класс Migration.

Это может быть полезно для документирования или если внешние инструменты анализируют метаданные миграций.

Важно: Этот атрибут не влияет на порядок применения миграций. Порядок определяется исключительно числовым префиксом в имени файла (например, 0001_, 0002_).

Как указать дату

Нужно вручную отредактировать файл миграции и добавить поле created с объектом datetime.

Пример файла миграции (myapp/migrations/0002_custom_date.py):

# Generated by Django 4.1.7 on 2023-10-27 10:00

from django.db import migrations, models
from datetime import datetime

class Migration(migrations.Migration):

    dependencies = [
        ('myapp', '0001_initial'),
    ]

    operations = [
        migrations.AddField(
            model_name='mymodel',
            name='new_field',
            field=models.CharField(max_length=100, null=True),
        ),
    ]

    # Явно указываем дату и время создания миграции
    # Это значение будет сохранено в метаданных
    created = datetime(2023, 1, 1, 12, 30, 0)

Рекомендации

  • Используйте datetime: Всегда присваивайте атрибуту created объект datetime.datetime, а не строку, чтобы избежать ошибок форматирования.
  • Не меняйте существующие: Не рекомендуется изменять этот атрибут в уже примененных миграциях, так как это может запутать систему контроля версий и других разработчиков.
  • Редкий случай: На практике эта возможность используется крайне редко. Для управления порядком миграций следует использовать правильное именование файлов и управление зависимостями (dependencies).