2015-01-07 2 views
4

У меня возникли проблемы с Django 1.7, я пытаюсь сохранить пользователя в таблице, но я получаю сообщение об ошибке, что таблица не существует.Django OperationalError: недостающая таблица; миграция не распознает недостающую таблицу

Вот код, я выполнения:

from django.conf import settings 
from django.contrib.auth import BACKEND_SESSION_KEY, SESSION_KEY, get_user_model 
User = get_user_model() 
from django.contrib.sessions.backends.db import SessionStore 
from django.core.management.base import BaseCommand 
class Command(BaseCommand): 

    def handle(self, email, *_, **__): 

     session_key = create_pre_authenticated_session(email) 
     self.stdout.write(session_key) 


def create_pre_authenticated_session(email): 
    user = User.objects.create(email=email) 
    session = SessionStore() 
    session[SESSION_KEY] = user.pk 
    session[BACKEND_SESSION_KEY] = settings.AUTHENTICATION_BACKENDS[0] 
    session.save() 
    return session.session_key 

Однако в

user = User.objects.create(email=email) 

Я получаю Error сообщение:

django.db.utils.OperationalError: no such table: accounts_user 

Вот модель пользователя на accounts/models.py, который я пытаюсь использовать для построения таблицы:

from django.db import models 
from django.utils import timezone 

class User(models.Model): 
    email = models.EmailField(primary_key=True) 
    last_login = models.DateTimeField(default=timezone.now) 
    REQUIRED_FIELDS =() 
    USERNAME_FIELD = 'email' 

    def is_authenticated(self): 
     return True 

Я бежал sqlmigrate против этой миграции с 'manage.py accounts 0001.initial' и я получил правильный создать таблицу SQL назад, но работает 'manage.py migrate' дает мне следующее:

Operations to perform: 
    Apply all migrations: sessions, admin, lists, contenttypes, accounts, auth 
Running migrations: 
    No migrations to apply. 

миграция просто результат запуска «makemigration» из оболочки, без специального кода. Я вижу учетные записи, перечисленные в включенных приложениях, но миграция не выполняется, поэтому мой сайт находится в нечетном месте, где Django говорит, что таблица отсутствует, когда я пытаюсь ее использовать, но Django говорит, что существует, когда я пытаюсь выполните миграцию, чтобы создать ее.
Почему Django ошибочно полагает, что таблица уже существует, когда я могу посмотреть на базу данных и видеть, что это не так?

+0

Попробуйте запустить 'python manage.py makemigrations -app-name' перед запуском' python manage.py migrate' // или проверить, что вы подделали предыдущий процесс 'migrate' – ruddra

+0

. Управляемая дизайнерская книга Гарри Персивала? Я столкнулся с той же проблемой. Мы, должно быть, что-то пропустили. – ericso

+0

Эрик: Я выяснил решение, которое сработало для меня. Оказывается, я не пропустил ни одного шага, но место, где он размещает свой файл sql, отличается от того, где Django создает его. Базовый sqlite-файл Django находится под src/db.sqlite3. Однако, если вы посмотрите под src/superlists/db.sqlite3, вы обнаружите, что другой файл sqlite был создан в соответствии с путём, заданным параметрами BASE_DIR. Я подозреваю, что расхождение является результатом книги, используя более раннюю версию Django. – user856358

ответ

2

@ user856358 Ваш комментарий о другом файле sqlite кажется основной причиной. Я столкнулся с той же ошибкой, и это было разрешено, удалив этот файл и выполнив другую миграцию. В моем случае, файл был расположен, как указан в settings.py:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(BASE_DIR, '../database/db.sqlite3'), 
    } 
} 

Удалив файл .sqlite3 там, я был в состоянии успешно запустить миграцию и устранить ошибку не-такой-таблицы ...

django.db.utils.OperationalError: no such table: accounts_user 
$ rm ../database/db.sqlite3 
$ python3 manage.py migrate 
Смежные вопросы