我正在使用Django-CMS的Django项目中构建一个相当简单的应用程序,即研究项目。(这是我对项目/应用程序的首次尝试。)它的主要目的是存储各种知识资产(例如,研究人员撰写的文章,书籍等)。
问题是,当我将浏览器指向/ research /时,出现一条错误,提示表’research_journal’不存在(“ no such table”)。
我正在使用带有sqlite3数据库的Djnago 1.6.5。
看python manage.py sql research收益:
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并得到:
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并获得以下信息:
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(请注意,我正在通过渲染传递两个对象,忽略了我还没有在整个交易中包括Book类的事实):
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:
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)
有什么想法吗?任何帮助将不胜感激。
python manage.py migrate --run-syncdb
看来我的迁移存在问题。
我运行后./manage.py schemamigration research --auto发现,许多字段没有指定默认值。
./manage.py schemamigration research --auto
所以,我跑./manage.py schemamigration research --init了./manage.py migrate research
./manage.py schemamigration research --init
./manage.py migrate research
从那里重新运行服务器就可以了!