私は、Django-CMSを使用するDjangoプロジェクトで、かなり単純なアプリケーション、研究を構築しています。 (プロジェクト/アプリケーションでの最初の基礎的な試みです。)主な目的は、さまざまな知的資産(研究者によって書かれた記事、書籍など)を保存することです。
問題は、ブラウザで/ research /をポイントすると、テーブル「research_journal」が存在しないというエラーが表示されることです(「no such table」)。
Sqlite3データベースでDjnago 1.6.5を使用しています。
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です(2つのオブジェクトをレンダリングに渡していることに注意してください。取引全体に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)
考え?どんな助けも大歓迎です。
移行に問題があったようです。
./manage.py schemamigration research --auto
を実行しましたが、多くのフィールドにはデフォルトが指定されていませんでした。
それで、./manage.py schemamigration research --init
に続いて./manage.py migrate research
を実行しました
そこからサーバーを再実行すると、トリックが行われました!
このコメント このページで私と他のいくつかの人のために働いた。独自の答えに値します。
python manage.py migrate --run-syncdb
Django 1.10の場合、python manage.py makemigrations appname
を実行する必要があります。
Django 1.9、SQLite3、およびDjangoCMS 3.2を使用していますが、同じ問題がありました。 python manage.py makemigrations
を実行して解決しました。これに続いて、データベースにはヌル以外の値タイプが含まれているが、デフォルト値が設定されていないことを示すプロンプトが表示されました。 1つの値を今すぐ選択するか、2)終了して、models.pyのデフォルト設定を変更します。最初のオプションを選択し、デフォルト値の1を指定しました。プロンプトが終了するまでこれを4〜5回繰り返しました。次にpython manage.py migrate
を実行しました。今ではうまく動作します。最初にpython manage.py makemigrations
を実行すると、データベースの修正されたコピーが作成され(私の場合は0004)、いつでも以前のデータベースの状態に戻すことができます。
この問題は、移行を実行することで解決する場合があります。
python manage.py makemigrations
python manage.py migrate
models.py
を変更するたびに上記の操作を実行してください。
このエラーは、新しく作成したテーブルへの移行を行っていない場合に発生するため、まずcmdでコマンドをpython manage.py makemigrations
として記述し、makemigrationsコマンドによって行われたこれらの移行を適用する別のコマンドを記述します:python manage.py migrate
誰かが提案のいずれかを見つけた場合:
python manage.py makemigrations
python manage.py migrate
python manage.py migrate --run-syncdb
失敗した場合、アプリディレクトリ内に「migrations
」という名前のフォルダーを追加し、空の__init__.py
ファイルを作成する必要があります。
これは私に起こりました。私にとっては、db.sqlite3
をリポジトリから追跡されないものとして追加したためです。追加してサーバーにプッシュしたので、適切に機能しました。これを実行した後、makemigartions
およびmigrate
も実行します。
Django CMS 3.4とDjango 1.8を使用しています。 Django CMSコードで根本原因をステップスルーしました。根本的な原因は、Django CMSが、データベース呼び出しを行う前に、SQLite3データベースを含むファイルがあるディレクトリにディレクトリを変更していないことです。エラーメッセージは偽です。根本的な問題は、SQLiteデータベース呼び出しが間違ったディレクトリで行われることです。
回避策は、作業ディレクトリに変更するときに、すべてのDjangoアプリケーションがディレクトリをDjango Projectルートディレクトリに戻すようにすることです。