tutorial español cms blog django django-cms

español - Django: OperationalError No existe tal tabla



django cms tutorial (7)

Estoy construyendo una aplicación bastante simple, investigación, en mi proyecto Django que usa Django-CMS. (Es mi primer intento innovador en un proyecto / aplicación). Su propósito principal es almacenar varios activos intelectuales (es decir, un artículo, un libro, etc., escritos por un investigador).

El problema es que cuando apunto el navegador a / research / me aparece un error que dice que la tabla ''research_journal'' no existe ("no existe dicha tabla").

Estoy usando Djnago 1.6.5 con una base de datos sqlite3.

En cuanto a los 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;

He ejecutado python manage.py migrate research y obtengo:

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

He ejecutado python manage.py syncdb y obtengo lo siguiente:

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)

Aquí está el 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)

Aquí está mi views.py (tenga en cuenta que estoy pasando dos objetos a través del renderizado, ignore el hecho de que todavía no he incluido los libros de la clase):

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

Aquí está url.py de la aplicación:

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''), )

Aquí está la plantilla 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 %}

Por si acaso importa, aquí está mi 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)

¿Pensamientos? Cualquier ayuda sería muy apreciada.


El problema se puede resolver ejecutando migraciones.

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

realice las operaciones anteriores siempre que haga cambios en models.py .


Esto me sucedió y para mí fue porque agregué db.sqlite3 como no db.sqlite3 desde el repositorio. Lo agregué y lo llevé al servidor para que funcionara correctamente. También ejecuta makemigartions y migrate después de hacer esto.


Estoy usando Django 1.9, SQLite3 y DjangoCMS 3.2 y tuve el mismo problema. Lo resolví ejecutando python manage.py makemigrations . A esto siguió un aviso que indicaba que la base de datos contenía tipos de valores no nulos pero no tenía un conjunto de valores predeterminado. Me dio dos opciones: 1) seleccionar un valor único ahora o 2) salir y cambiar la configuración predeterminada en models.py. Seleccioné la primera opción y le di el valor predeterminado de 1. Repetí esto cuatro o cinco veces hasta que el mensaje indicara que había finalizado. Luego corrí python manage.py migrate . Ahora funciona bien. Recuerde, al ejecutar python manage.py makemigrations primero, se crea una copia revisada de la base de datos (la mía era 0004) y siempre puede volver al estado de la base de datos anterior.


Estoy usando Django CMS 3.4 con Django 1.8. Caminé a través de la causa raíz en el código de Django CMS. La causa principal es que el CMS de Django no está cambiando el directorio al directorio con el archivo que contiene la base de datos SQLite3 antes de hacer llamadas a la base de datos. El mensaje de error es falso. El problema subyacente es que una llamada de base de datos SQLite se realiza en el directorio incorrecto.

La solución es asegurar que todas sus aplicaciones Django cambien de nuevo el directorio al directorio raíz del Proyecto Django cuando cambien a directorios de trabajo.


Para django 1.10 puede que tengas que hacer python manage.py makemigrations appname .


Parece que hubo un problema con mi migración.

Corrí ./manage.py schemamigration research --auto y encontré que muchos de los campos no tenían un valor predeterminado especificado.

Por lo tanto, corrí ./manage.py schemamigration research --init seguido por ./manage.py migrate research

¡Correr el servidor desde allí hizo el truco!


Este comentario en esta página funcionó para mí y para algunos otros. Merece su propia respuesta:

python manage.py migrate --run-syncdb