Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django: OperationalError No Such Table

I'm building a fairly simple application, research, in my Django project that uses Django-CMS. (It's my first ground-up attempt at a project/application.) Its main purpose is to store various intellectual assets (i.e article, book, etc. written by a researcher).

The problem is that when I point the browser to /research/ I get an error saying that the table 'research_journal' doesn't exist ("no such table").

I'm using Djnago 1.6.5 with a sqlite3 database.

Looking at python manage.py sql research yields:

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; 

I've run python manage.py migrate research and get:

/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) 

I've run python manage.py syncdb and get the following:

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) 

Here's the 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) 

Here's my views.py (note that I am passing two objects through render, ignore the fact that I have yet to include the class Books in the whole deal):

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}) 

Here's the application's 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'), ) 

Here's the index.html template:

{% 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 %} 

Just in case it matters, here's my 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) 
like image 781
Brian Avatar asked Sep 10 '14 17:09

Brian


People also ask

What is OperationalError?

OperationalError (documentation) is one of many possible Python exceptions thrown by the Django web framework when there is an issue that occurs in the Django ORM. Note that OperationalError can be imported either from django. db or django.


1 Answers

Use:

python manage.py migrate --run-syncdb  

As stated in this comment by Benyamin Jafari:

--run-syncdb - Creates tables for apps without migrations.

Also don't forget to specity app path. For example:

python manage.py makemigrations app python manage.py migrate app 
like image 117
kqw Avatar answered Sep 18 '22 19:09

kqw