2013-08-19 2 views
1

У меня есть следующая модель -миграции существующего приложения через юг

class ToDo(models.Model): 

    todo_title = models.CharField(null=True, blank=True, max_length=200) 
    todo_status = models.IntegerField(choices=TASK_STATUS, null=True, blank=True) 
    assigned_to = models.ManyToManyField(OrgStaff, null=True, blank=True, related_name='assigned_to') 
    assigned_by = models.ManyToManyField(OrgStaff, null=True, blank=True, related_name='assigned_by') 
    assigned_time = models.DateTimeField(auto_now_add=True) 
    completed_time = models.DateTimeField(null=True, blank=True) 

Я затем запустить python manage.py convert_to_south todoapp где todoapp это имя приложения. Тогда я бегу python manage.py migrate todoapp.

Как только это будет сделано, я добавить еще одно поле в указанной выше модели -

class ToDo(models.Model): 

    todo_title = models.CharField(null=True, blank=True, max_length=200) 
    todo_slug = models.SlugField(null=True, blank=True) 
    todo_status = models.IntegerField(choices=TASK_STATUS, null=True, blank=True) 
    assigned_to = models.ManyToManyField(OrgStaff, null=True, blank=True, related_name='assigned_to') 
    assigned_by = models.ManyToManyField(OrgStaff, null=True, blank=True, related_name='assigned_by') 
    assigned_time = models.DateTimeField(auto_now_add=True) 
    completed_time = models.DateTimeField(null=True, blank=True) 

Теперь я делаю schemamigation - python manage.py schemamigration todoapp --auto, а затем python manage.py migrate todoapp делает это дает следующее сообщение об ошибке -

Running migrations for taskbase: 
- Migrating forwards to 0002_auto__add_field_todo_todo_slug. 
> taskbase:0002_auto__add_field_todo_todo_slug 
KeyError: u'todo_title' 

Любая идея, почему я получаю эту ошибку? Я ударил головой, но не смог найти причину.

ответ

0

Вполне возможно, что префиксы «названия» и «статуса» с «todo_» вызывает столкновение с именем полой таблицы. Фактически, в базе данных Django называет поля todoapp_todo_todo_status, а Юг можно просто смутить. Юг делает некоторые творческие вещи внутренне, следовательно, столкновение. Я бы предложил попробовать:

class ToDo(models.Model): 

    title = models.CharField(null=True, blank=True, max_length=200) 
    status = models.IntegerField(choices=TASK_STATUS, null=True, blank=True) 
    assigned_to = models.ManyToManyField(OrgStaff, null=True, blank=True, related_name='assigned_to') 
    assigned_by = models.ManyToManyField(OrgStaff, null=True, blank=True, related_name='assigned_by') 
    assigned_time = models.DateTimeField(auto_now_add=True) 
    completed_time = models.DateTimeField(null=True, blank=True) 

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

+0

На самом деле у меня не было префикса 'todo' изначально, в первый раз, когда я делал, я получал ошибку' KeyError: u'title'', поэтому я добавил префикс. Теперь это дает ошибку. – user1629366

+0

Я удалил South == 0.7.3 и обновился до South == 0.8.2, и он сработал. – user1629366

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