Ошибка миграции Django South содержит нулевые значения с полем null = True

При добавлении поля для easy-thumbnails в модель

easy_thumbnail = ThumbnailerImageField(
    null=True, blank=True, verbose_name=_("Easy_Thumbnails"),
    upload_to="easy_thumbnails",
    resize_source=dict(size=(100, 100), crop="smart"),
)

При выполнении ./manage.py schemamigration test --auto South производит следующую миграцию:

def forwards(self, orm):
    # Adding field 'Test.easy_thumbnail'
    db.add_column('test_test', 'easy_thumbnail', self.gf('django.db.models.fields.files.ImageField')(), keep_default=False)
[...]
models = {
    'test.test': {
        'Meta': {'object_name': 'Test'},
        'easy_thumbnail': ('django.db.models.fields.files.ImageField', [], {}),

При выполнении ./manage.py migrate test я получил эту ошибку:

The error is `django.db.utils.IntegrityError: column "easy_thumbnail" contains null values`

person Pascal Polleunus    schedule 11.10.2010    source источник


Ответы (1)


Изменение сценария миграции следующим образом решает проблему:

  • Добавление «null=True, Blank=True» в db.add_column
  • Добавление "'null': 'True', 'blank': 'True'" в моделях ['test.test']['easy_thumbnail']

Код:

def forwards(self, orm):
    # Adding field 'Test.easy_thumbnail'
    db.add_column('test_test', 'easy_thumbnail', self.gf('django.db.models.fields.files.ImageField')(null=True, blank=True), keep_default=False)
[...]
models = {
    'test.test': {
        'Meta': {'object_name': 'Test'},
        'easy_thumbnail': ('django.db.models.fields.files.ImageField', [], {'null': 'True', 'blank': 'True'}),
person Pascal Polleunus    schedule 11.10.2010
comment
Это первый шаг. На втором шаге. Вы должны установить для старых данных разумные значения по умолчанию и на третьем шаге удалить нулевые значения... если, конечно, это имеет смысл в вашем приложении. - person Almad; 13.10.2010
comment
Здесь важно то, что юг не определяет новый столбец, допуская нулевые и пустые значения, как определено в модели. - person Pascal Polleunus; 15.10.2010