У меня есть следующая проблема:
Я работаю над приложением Django, у которого есть основная БД, и теперь мы добавляем дополнительную БД для синхронизации только некоторых данных в ней. Когда я попытался запустить миграцию, я получил ошибку: нулевое значение в столбце 'field_2' нарушает ограничение not-null. И вот вопрос:
Модель:
class A(models.Model):
field_1 = models.BooleanField(default=False)
field_2 = models.BooleanField(default=True) # added later
field_3 = models.BooleanField(default=True) # added later
и 4 миграции (ну, еще, но те не в счет):
0001 - связанныймодель создана
0002 - создана модель A и создана связь (ForeignKey)
0003 - поле_2 добавлено в модель A
0004 - поле_3 добавлено в модельA
Однако, когда я запускаю миграцию на новую БД, миграция останавливается на миграции 0002 с упомянутой выше ошибкой:
django.db.utils.IntegrityError: нулевое значение в столбце«field_2» нарушает ненулевое ограничение
, даже если поле создано для более поздней миграции. Я не знаю, стоит ли даже начинать обходить эту проблему.
Редактировать:
Миграция 0001:
class Migration(migrations.Migration):
initial = True
dependencies = []
operations = [
migrations.CreateModel(
name='B',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('year', models.IntegerField()),
('active', models.BooleanField(default=True)),
],
)
]
Миграция 0002:
class Migration(migrations.Migration):
dependencies = ['app', '0001']
operations = [
migrations.CreateModel(
name='A',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('field_1', models.BooleanField(default=False))
],
),
migrations.AddField(
model_name='b',
name='a',
field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.SET_NULL, to='app.B'),
),
]
Миграция 0003:
class Migration(migrations.Migration):
dependencies = ['app', '0002']
operations = [
migrations.AddField(
model_name='a',
name='field_2',
field=models.BooleanField(default=True),
),
]
Миграция 0004:
class Migration(migrations.Migration):
dependencies = ['app', '0003']
operations = [
migrations.AddField(
model_name='a',
name='field_3',
field=models.BooleanField(default=True),
),
]
Миграция: 0001