2014-09-10 71 views
20

我在使用Django-CMS的Django项目中构建了一个相当简单的应用程序,研究。 (这是我在项目/应用程序中首次尝试)。主要目的是存储各种知识资产(即由研究人员撰写的文章,书籍等)。Django:OperationalError没有这样的表

问题是,当我把浏览器指向/ research /时,我得到一个错误,提示表'research_journal'不存在(“没有这样的表”)。

我使用Django 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) 

这里是我的views.py(请注意,我传递了两个对象,通过渲染,忽视的事实是,我还没有包括在整个交易类书籍):

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) 

想法?任何帮助将不胜感激。

+0

您是否运行过python manage.py syncdb? – jabez 2014-09-10 18:38:26

+0

是的。我已经运行python manage.py syncdb(添加结果发布)。我的印象是,但是通过迁移使用南方无需通过上述命令同步数据库。那是不正确的? – Brian 2014-09-10 19:07:43

+0

您是否尝试再次删除数据库和syncDB? – ppolak 2014-09-10 19:21:39

回答

9

看起来我的移植存在问题。

我跑./manage.py schemamigration research --auto,发现很多字段没有指定默认值。

所以,我跑./manage.py schemamigration research --init其次./manage.py migrate research

重新运行该服务器从那里的伎俩!

+15

'manage.py migrate --run-syncdb'为我工作 – erbdex 2016-02-03 08:40:32

0

我正在使用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),并且您始终可以恢复到以前的数据库状态。

51

This comment在这个页面上为我和其他人工作。它值得自己的答案:

python manage.py migrate --run-syncdb 
+0

不要忘记先运行'python makemigrations' – 2016-09-12 11:21:59

0

我使用Django CMS 3.4与Django 1.8。 我介绍了Django CMS代码中的根本原因。 根本原因是Django CMS在进行数据库调用之前没有将目录更改为包含SQLite3数据库的文件所在的目录。错误消息是虚假的。根本的问题是SQLite数据库调用是在错误的目录中进行的。

解决方法是确保所有的Django应用程序在切换到工作目录时将目录切换回Django Project根目录。

12

对于django 1.10,您可能需要做python manage.py makemigrations appname