2014-12-12 1 views
0

Я получил форму Django, которая появляется правильно в моем браузере, но после заполнения поля и нажать отправить, я получаю эту ошибку: table main_manifest has no column named manifest_nameДжанго Форма Error: таблица main_manifest не имеет столбца с именем manifest_name

Я м с помощью Python 2.7.5 & Django 1.7.1, так что я бежал:

python manage.py syncdb 
python manage.py makemigrations 
python manage.py migrate 

и я попытался удалить мои миграции и базы данных и восстановили свои таблицы. Почему я получаю эту ошибку?

Models.py

from django.db import models 

class Manifest(models.Model): 
    manifest_name = models.CharField(max_length=300) 
    keywords = models.CharField(max_length=300) 
    product_name = models.CharField(max_length=300) 
    timestamp = models.DateTimeField(auto_now_add=True) 

Forms.py

from django.forms import ModelForm 
from .models import Manifest 

class ManifestForm(ModelForm): 
    class Meta: 
     model = Manifest 
     fields = "__all__" 

---- Редактировать ----- Основываясь на комментарий Пауло Я думаю, что, возможно, мой файловая структура испорчена и почему мои команды миграции не работают. Может ли кто-нибудь проверить, что это выглядит правильно?

MY_PROJECT_FOLDER 
--__init__.py 
--settings.py 
--urls.py 
--wsgi.py 
MAIN_APP_FOLDER 
--MIGRATIONS_FOLDER 
--TEMPLATES_FOLDER 
----__init__.py 
----admin.py 
----forms.py 
----models.py 
----views.py 
----MAIN_APP_FOLDER 
------allfiles.html 
------morefiles.html 
STATIC_FOLDER 
TEMPLATES_FOLDER 
db.sqlite3 
manage.py 

---- Редактировать ----- Это, вероятно, стоит отметить, что после запуска python manage.py sql main в терминале я, кажется, вижу совершенно ясно, что таблица main_manifest на самом деле есть столбец с именем manifest_name:

CREATE TABLE "main_manifest" (
    "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, 
    "manifest_name" varchar(300) NOT NULL, 
    "keywords" varchar(300) NOT NULL, 
    "product_name" varchar(300) NOT NULL, 
    "timestamp" datetime NOT NULL 
) 
; 
+0

Эта ошибка часто указывает, что определение модели не синхронизировано с фактической таблицей базы данных. Если это так, вы должны запустить соответствующую команду «ALTER TABLE ...» или удалить таблицу и запустить «manage.py syncdb» (или «manage.py schemamigration ...», если вы используете юг). –

+0

Я понимаю, что миграции теперь являются частью Django 1.7.1 (http://south.aeracode.org/) и что Юг больше не нужен, и я могу вместо этого просто использовать: python manage.py syncdb python manage .py makemigrations python manage.py migrate После запуска вышеуказанных команд все еще необходимо запустить команду «alter table»? –

+0

Извините, Майкл, я не заметил, что вы используете 1.7. Нет, теоретически это должно быть достаточно, но django жалуется, что в таблице отсутствует столбец «manifest_name», поэтому, возможно, вы не выполняете схематизацию в правильном приложении или какую-то другую проблему. –

ответ

0

ОК Оказывается, я пропустил то, что я определенно должен был знать. Команды миграции требуют, чтобы я привязывался к имени приложения в конце команды. Без этого я фактически не обновляю правильные модели. поэтому он должен был быть (main = AppName):

python manage.py syncdb main 
python manage.py makemigrations main 
python manage.py migrate main 

Это решило мою проблему! Спасибо Пауло за то, что указал мне в правильном направлении!

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