Вы, похоже, немного неверно истолковали вывод, полученный при запуске makemigrations
, здесь все работает как положено.
Я создал тестовый проект, используя предоставленный вами код, и запустил makemigrations
на flashcards
приложение.Просмотр содержимого сгенерированного файла миграции 0001_initial.py
:
# Generated by Django 2.1.7 on 2019-03-30 03:20
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel( # Summarised as: - Create model Card
name='Card',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('key', models.CharField(max_length=300)),
('answer', models.CharField(max_length=300)),
],
),
migrations.CreateModel( # Summarised as: - Create model Stack
name='Stack',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=200, unique=True)),
('description', models.CharField(max_length=300)),
('created_date', models.DateTimeField(default=django.utils.timezone.now)),
('published_date', models.DateTimeField(blank=True, null=True)),
('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel( # Summarised as: - Create model Subject
name='Subject',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=200)),
('description', models.CharField(max_length=300, null=True)),
# As the ``Stack`` model has been created it can include the ForeignKey definition here.
('stack', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='flashcards.Stack')),
],
),
migrations.AddField( # Summarised as: - Add field subject to card
model_name='card',
name='subject',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='flashcards.Subject'),
),
]
Вывод, который вы видите после запуска makemigrations
, представляет собой краткую сводку сгенерированного файла миграции.
Из-за того, что Django создает модели, он не может добавить поле subject
к Card
, поскольку Subject
еще не было создано.Поэтому он пропускает поле subject
и добавляет его после создания модели Subject
.
Я могу понять, почему это выглядело немного запутанным, потому что нет явного сообщения, говорящего что-то вроде - Add field stack to subject
, потому что поле stack
добавлено на шаге - Create model Subject
.