Как django знает, какие миграции были запущены?

Как django знает, была ли еще применена миграция? Как правило, это правильно, но когда это не так, я никогда не знаю, с чего начать поиск и устранение неполадок.

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

Как утверждают другие ответы, django имеет специальную таблицу django_migrations где хранится история миграции.

Если вы заинтересованы в том, чтобы быстрее раскачивать освещенный бит, см. Класс MigrationRecorder который отвечает за запись миграции в базе данных. Кроме того, здесь приведена базовая модель для таблицы django_migrations :

 class Migration(models.Model): app = models.CharField(max_length=255) name = models.CharField(max_length=255) applied = models.DateTimeField(default=now) class Meta: apps = Apps() app_label = "migrations" db_table = "django_migrations" def __str__(self): return "Migration %s for %s" % (self.name, self.app) 

Если это django1.7, он хранит историю в базе данных, таблицу django_migrations . Юг также хранит миграцию в базе данных, и вы можете включить функцию для отображения истории миграции в django admin.

Вы можете просто использовать команду showmigrations для предоставления списка миграций

 $ python manage.py showmigrations 

независимо от того, применяется ли каждая миграция (отмечена [X] рядом с именем миграции).

 ~/workspace $ python manage.py showmigrations admin [X] 0001_initial [X] 0002_logentry_remove_auto_add auth [X] 0001_initial [X] 0002_alter_permission_name_max_length [X] 0003_alter_user_email_max_length [X] 0004_alter_user_username_opts [X] 0005_alter_user_last_login_null [X] 0006_require_contenttypes_0002 [X] 0007_alter_validators_add_error_messages contenttypes [X] 0001_initial [X] 0002_remove_content_type_name sessions [X] 0001_initial