2015-02-23 8 views
0

вот его мой код моделиДжанго миграции: NOT NULL ограничение не удалось

class student(models.Model): 
    name = models.CharField(max_length=100) 
    age = models.IntegerField() 
    available = models.BooleanField(default=False, blank=True) 

В вышеприведенной модели доступно мое новое поле, теперь я хочу перенести базу данных, но это дает мне ошибку, когда я запустить следующую команду

python manage.py migrate 

Operations to perform: 
    Apply all migrations: student 
Running migrations: 
    Applying order.0004_auto_20150223_1758...Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/home/nikhil/live-devEnv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line 
    utility.execute() 
    File "/home/nikhil/live-devEnv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 377, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/home/nikhil/live-devEnv/local/lib/python2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/home/nikhil/live-devEnv/local/lib/python2.7/site-packages/django/core/management/base.py", line 338, in execute 
    output = self.handle(*args, **options) 
    File "/home/nikhil/live-devEnv/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 160, in handle 
    executor.migrate(targets, plan, fake=options.get("fake", False)) 
    File "/home/nikhil/live-devEnv/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 63, in migrate 
    self.apply_migration(migration, fake=fake) 
    File "/home/nikhil/live-devEnv/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 97, in apply_migration 
    migration.apply(project_state, schema_editor) 
    File "/home/nikhil/live-devEnv/local/lib/python2.7/site-packages/django/db/migrations/migration.py", line 107, in apply 
    operation.database_forwards(self.app_label, schema_editor, project_state, new_state) 
    File "/home/nikhil/live-devEnv/local/lib/python2.7/site-packages/django/db/migrations/operations/fields.py", line 37, in database_forwards 
    field, 
    File "/home/nikhil/live-devEnv/local/lib/python2.7/site-packages/django/db/backends/sqlite3/schema.py", line 167, in add_field 
    self._remake_table(model, create_fields=[field]) 
    File "/home/nikhil/live-devEnv/local/lib/python2.7/site-packages/django/db/backends/sqlite3/schema.py", line 135, in _remake_table 
    self.quote_name(model._meta.db_table), 
    File "/home/nikhil/live-devEnv/local/lib/python2.7/site-packages/django/db/backends/schema.py", line 99, in execute 
    cursor.execute(sql, params) 
    File "/home/nikhil/live-devEnv/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 81, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "/home/nikhil/live-devEnv/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
    File "/home/nikhil/live-devEnv/local/lib/python2.7/site-packages/django/db/utils.py", line 94, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "/home/nikhil/live-devEnv/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
    File "/home/nikhil/live-devEnv/local/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py", line 485, in execute 
    return Database.Cursor.execute(self, query, params) 
django.db.utils.IntegrityError: NOT NULL constraint failed: student.available 

что-то не то, пожалуйста, дайте мне решение проблемы выше.

+0

Исключение относится к полю 'order_userorder__new.isUrgent'. Можете ли вы предоставить код для соответствующей модели? –

+0

isUrgent = models.BooleanField (default = False), Это новое поле добавляется в поле моего пользователя –

+0

https://code.djangoproject.com/ticket/21783 –

ответ

1

У меня была эта проблема, когда я хотел изменить поле, чтобы оно было непустым, но в базе данных уже были данные, где это значение было null, что привело к конфликту. Я смог его решить

Add поле с нулевым значением.

migrations.AddField(
    model_name='mymodel', 
    name='new_field', 
    field=models.OneToOneField(to='app.OtherModel', null=True, default=None), 
    preserve_default=False, 
), 

Использование RunPython для заполнения поля существующих данных с чем-то, что имело смысл

migrations.RunPython(fix_null_fields) 

Наконец alter поле, чтобы быть не обнуляемым

migrations.AlterField(
    model_name='mymodel', 
    name='new_field', 
    field=models.OneToOneField(to='app.OtherModel'), 
    preserve_default=True, 
), 

Это, казалось, работать меня без проблем. Для получения дополнительной информации смотрите Migrations и Migration operations

Смежные вопросы