2012-05-21 3 views
2

я редактировал модель в Django, и в результате я получаю ошибку: «таблица reserve_time не имеет столбца с именем оговорки» для нижеприведенных моделей:Как исправить таблицу x не имеет столбца с именем y?

from django.db import models 
import datetime 

class Club(models.Model): 
    establishment = models.CharField(max_length=200) 
    address = models.CharField(max_length=200) 
    def __unicode__(self): 
     return self.establishment 

class Day(models.Model): 
    club = models.ForeignKey(Club) 
    day = models.DateField('day') 
    def __unicode__(self): 
     return unicode(self.day) 

class Court(models.Model): 
    club = models.ForeignKey(Club) 
    day = models.ForeignKey(Day) 
    court = models.IntegerField(max_length=200) 
    def __unicode__(self): 
     return unicode(self.court) 

class Time(models.Model): 
    club = models.ForeignKey(Club) 
    day = models.ForeignKey(Day) 
    court = models.ForeignKey(Court) 
    time = models.TimeField('time') 
    reservation = models.CharField(max_length=200) 
    def __unicode__(self): 
     return unicode(self.time) 

Я побежал питон manage.py SyncDB и питон manage.py после этого сервер работает, но я все еще получаю вышеуказанную ошибку. Есть какие нибудь идеи как это починить? Если я удалю поле «резервирование», он отлично работает. В администраторе появляется текстовое поле для «резервирования», но при попытке сохранения появляется ошибка.

ответ

8

Проблема заключается в том, что django не сделает ничего, чтобы исправить ваши таблицы, когда вы вносите изменения в поле. Все syncdb будет делать таблицы, которые еще не существуют. Если вы решите изменить свою схему и добавить поля, вам либо нужно создать их вручную в своей базе данных, либо отбросить таблицу, и позволить syncdb воссоздать ее, либо начать использовать такой проект, как , для обработки миграции базы данных.

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

+0

+1 для использования на юг. –

0

Syncdb не изменяет существующие модели по порядку. Одна из возможностей заключается в том, чтобы вручную отредактировать ваш db или удалить модель из вашей базы данных и снова запустить syncdb (это не должно выполняться в продуктивной среде без надлежащей резервной копии).

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