Django: OperationalError Нет такой таблицы

Я создаю довольно простое приложение, исследование, в моем проекте Django, который использует Django-CMS. (Это моя первая попытка наложения на проект/приложение.) Основная цель - хранить различные интеллектуальные активы (например, статью, книгу и т.д., Написанную исследователем).

Проблема заключается в том, что когда я указываю браузер на /research/, я получаю сообщение об ошибке, указывающее, что таблица "research_journal" не существует ( "нет такой таблицы" ).

Я использую Djnago 1.6.5 с базой данных sqlite3.

Глядя на python manage.py sql research, получаем:

BEGIN;
CREATE TABLE "research_researchbase" (
    "id" integer NOT NULL PRIMARY KEY,
    "pub_date" datetime NOT NULL,
    "authors" varchar(200) NOT NULL,
    "year" varchar(25) NOT NULL,
    "title" varchar(200) NOT NULL,
    "subtitle" varchar(200) NOT NULL,
    "image_id" integer NOT NULL REFERENCES "filer_image" ("file_ptr_id"),
    "link" varchar(200) NOT NULL
)
;
CREATE TABLE "research_journal" (
    "researchbase_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "research_researchbase" ("id"),
    "journal" varchar(200) NOT NULL,
    "abstract" text NOT NULL,
    "citation" varchar(200) NOT NULL
)
;
CREATE TABLE "research_encyclopedia_chapter" (
    "researchbase_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "research_researchbase" ("id"),
    "encyclopedia" varchar(200) NOT NULL,
    "publisher" varchar(200) NOT NULL,
    "summary" varchar(200) NOT NULL
)
;
CREATE TABLE "research_book" (
    "researchbase_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "research_researchbase" ("id"),
    "publisher" varchar(200) NOT NULL,
    "summary" varchar(200) NOT NULL
)
;

COMMIT;

Я запустил python manage.py migrate research и получил:

/Users/XXX/Documents/repos/sfs/env/lib/python2.7/site-packages/app_data/fields.py:2: DeprecationWarning: django.utils.simplejson is deprecated; use json instead.
  from django.utils import simplejson as json

Running migrations for research:
- Nothing to migrate.
 - Loading initial data for research.
Installed 0 object(s) from 0 fixture(s)

Я запустил python manage.py syncdb и получил следующее:

Syncing...
Creating tables ...
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)

Synced:
 > djangocms_admin_style
 > django.contrib.auth
 > django.contrib.contenttypes
 > django.contrib.sessions
 > django.contrib.admin
 > django.contrib.sites
 > django.contrib.sitemaps
 > django.contrib.staticfiles
 > django.contrib.messages
 > mptt
 > south
 > sekizai
 > django_select2
 > hvad

Not synced (use migrations):
 - djangocms_text_ckeditor
 - cms
 - menus
 - djangocms_style
 - djangocms_column
 - djangocms_file
 - djangocms_flash
 - djangocms_googlemap
 - djangocms_inherit
 - djangocms_link
 - djangocms_picture
 - djangocms_teaser
 - djangocms_video
 - reversion
 - polls
 - djangocms_polls
 - aldryn_blog
 - easy_thumbnails
 - filer
 - taggit
 - research
(use ./manage.py migrate to migrate these)

Здесь models.py:

from django.db import models
from django.utils import timezone
from filer.fields.image import FilerImageField

import datetime

class ResearchBase(models.Model):
    pub_date = models.DateTimeField('date published')
    authors = models.CharField(max_length=200)
    year = models.CharField(max_length=25)
    title = models.CharField(max_length=200)
    subtitle = models.CharField(max_length=200, blank=True)
    image = FilerImageField()
    link = models.CharField(max_length=200, blank=True)

    def __unicode__(self):
        return self.title

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)


class Journal(ResearchBase):
    journal = models.CharField(max_length=200)
    abstract = models.TextField()
    citation = models.CharField(max_length=200)


class Encyclopedia_Chapter(ResearchBase):
    encyclopedia = models.CharField(max_length=200)
    publisher = models.CharField(max_length=200)
    summary = models.CharField(max_length=200)


class Book(ResearchBase):
    publisher = models.CharField(max_length=200)
    summary = models.CharField(max_length=200)

Здесь my views.py(обратите внимание, что я передаю два объекта через рендеринг, игнорирую тот факт, что еще не включил класс Books во всей сделке):

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse, Http404
from django.template import RequestContext, loader

from research.models import Journal, Encyclopedia_Chapter, Book

def research_index(request):
    latest_journal_list = Journal.objects.order_by('-pub_date')[:5]
    latest_chapter_list = Encyclopedia_Chapter.objects.order_by('-pub_date')[:5]

    context = {
        'latest_journal_list': latest_journal_list,
        'latest_chapter_list': latest_chapter_list
    }

    return render(request, 'research/index.html', context)

def journal_detail(request, journal_id):
    journal = get_object_or_404(Journal, pk=journal_id)
    return render(request, 'research/journal_detail.html', {'journal': journal})

def chapter_detail(request, chapter_id):
    chapter = get_object_or_404(Encyclopedia_Chapter, pk=chapter_id)
    return render(request, 'research/chapter_detail.html', {'chapter': chapter})

Здесь приложение url.py:

from django.conf.urls import patterns, url

from research import views

urlpatterns = patterns('',
    url(r'^$', views.research_index, name='research'),
    url(r'^(?P<journal_id>\d+)/$', views.journal_detail, name='journal_detail'),
    url(r'^(?P<chapter_id>\d+)/$', views.chapter_detail, name='chapter_detail'),
)

Вот шаблон index.html:

{% extends 'research/base.html' %}

{% block research_content %}

<div class="container">
    <div class="row featurette">
        <h3 id="research">Peer-reviewed Journal Articles</h3>
        {% if latest_journal_list %}
            <ul id="research">
            {% for journal in latest_journal_list %}
                <li id="research">
                            <img src="{{ journal.image.url }}" id="research">
                            <h4>{{ journal.journal }}</h4>
                            <h5>{{ journal.title }}</h5>
                            <a href="{% url 'research:journal_detail' journal.id %}">Read More</a>
                        </li>
            {% endfor %}
            </ul>
        {% else %}
            <p>No journals are available.</p>
        {% endif %}
    </div>

    <div class="row featurette">
        <h3 id="research">Encyclopedia Chapters</h3>
        {% if latest_chapter_list %}
            <ul id="research">
            {% for chapter in latest_chapter_list %}
                <li id="research">
                            <img src="{{ chapter.image.url }}" id="research">
                            <h4>{{ chapter.journal }}</h4>
                            <h5>{{ chapter.title }}</h5>
                            <a href="{% url 'research:chapter_detail' chapter.id %}">Read More</a>
                        </li>
            {% endfor %}
            </ul>
        {% else %}
            <p>No encyclopedia chapters are available.</p>
        {% endif %}
    </div>
</div>

{% endblock %}

На всякий случай это важно, вот мой cms_app.py:

from cms.app_base import CMSApp
from cms.apphook_pool import apphook_pool
from django.utils.translation import ugettext_lazy as _


class ResearchApp(CMSApp):
    name = _("Research App")
    urls = ["research.urls"]
    app_name = "research"

apphook_pool.register(ResearchApp)

Мысли? Любая помощь будет принята с благодарностью.

Ответы

Ответ 1

Похоже, что была проблема с моей миграцией.

Я запустил ./manage.py schemamigration research --auto и обнаружил, что многие из полей не имеют указанного по умолчанию.

Итак, я запустил ./manage.py schemamigration research --init, а затем ./manage.py migrate research

Перезапуск сервера оттуда сделал трюк!

Ответ 2

Этот комментарий на этой странице работал у меня и нескольких других. Он заслуживает собственного ответа:

python manage.py migrate --run-syncdb

Ответ 3

Для django 1.10 вам может потребоваться python manage.py makemigrations appname.

Ответ 4

Я использую Django 1.9, SQLite3 и DjangoCMS 3.2 и имею ту же проблему. Я решил это, выполнив python manage.py makemigrations. Затем последовало приглашение, в котором указывалось, что база данных содержит непустые типы значений, но не имеет значения по умолчанию. Это дало мне два варианта: 1) выберите одно значение сейчас или 2) выйдите и измените настройку по умолчанию в models.py. Я выбрал первый вариант и дал значение по умолчанию 1. Повторял это четыре или пять раз, пока подсказка не сообщила, что она была закончена. Затем я запустил python manage.py migrate. Теперь все работает отлично. Помните, что при запуске python manage.py makemigrations сначала создается исправленная копия базы данных (мой 0004), и вы всегда можете вернуться в предыдущее состояние базы данных.

Ответ 5

Проблема может быть решена путем выполнения миграции.

  1. python manage.py makemigrations
  2. python manage.py migrate

выполняйте операции выше всякий раз, когда вы вносите изменения в models.py.

Ответ 6

Эта ошибка возникает, когда вы не сделали миграции в свою вновь созданную таблицу. Итак, сначала запишите команду на cmd как: python manage.py makemigrations а затем напишите еще одну команду для применения этих миграций, выполненную командой makemigrations: python manage.py migrate

Ответ 7

Если кто-то обнаружит, что любой из предложенных:

python manage.py makemigrations

python manage.py migrate

python manage.py migrate --run-syncdb

не удается, вам может понадобиться добавить папку с именем " migrations " в каталог приложения и создать пустой файл __init__.py.

Ответ 8

Я использую Django CMS 3.4 с Django 1.8. Я шагнул через основную причину в коде Django CMS. Корневой причиной является то, что Django CMS не меняет каталог в каталог с файлом, содержащим базу данных SQLite3, перед вызовом базы данных. Сообщение об ошибке является ложным. Основная проблема заключается в том, что вызов базы данных SQLite выполняется в неправильном каталоге.

Обходной путь заключается в том, чтобы все ваши приложения Django меняли каталог обратно в корневой каталог Django Project при смене рабочих каталогов.

Ответ 9

Это случилось со мной, и для меня это было потому, что я добавил db.sqlite3 как невоспроизводимый из репозитория. Я добавил его и нажал на сервер, чтобы он работал правильно. Также запустите makemigartions и выполните migrate после этого.

Ответ 10

В этом случае некоторые миграции все еще ждут, поэтому запустите python manage.py migrate и python manage.py makemigrations app_name

Ответ 11

Последний работал для меня в dJango 2.2.3... делая makemigrations, сопровождаемые определенным именем приложения.

Ответ 12

Я прошел через ту же ошибку, когда я пошел на панель администратора. Вы должны запустить этот instead-: python manage.py migrate --run-syncdb. Не забудьте включить migrate, я побежал:

python manage.py make migrations а затем python manage.py migrate

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

Ответ 13

Выполнение следующих команд решило эту проблему для меня 1. python manage.py migrate 2. python manage.py makemigrations 3. python manage.py makemigrations appName