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 (ie 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)
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
对于 django 1.10,您可能必须执行python manage.py makemigrations appname
。
If anyone finds that any of the suggested:
python manage.py makemigrations
python manage.py migrate
python manage.py migrate --run-syncdb
fail, you may need to add a folder named " migrations
" inside the app directory, and create an empty __init__.py
file.
It looks like there was an issue with my migration.
I ran ./manage.py schemamigration research --auto
and found that many of the fields didn't have a default specified.
So, I ran ./manage.py schemamigration research --init
followed by ./manage.py migrate research
Rerunning the server from there did the trick!
The issue may be solved by running migrations.
python manage.py makemigrations
python manage.py migrate
perform the operations above whenever you make changes in models.py
.
当您尚未对新创建的表进行迁移时会出现此错误,因此,首先在 cmd 上编写命令为: python manage.py makemigrations
,然后编写另一个命令以应用由 makemigrations 命令进行的这些迁移: python manage.py migrate
运行以下命令为我解决了这个问题
python manage.py migrate
python manage.py makemigrations
python manage.py makemigrations appName
I got through the same error when I went on to the admin panel. You ought to run this instead-: python manage.py migrate --run-syncdb
. Don't forget to include migrate , I ran:
python manage.py make migrations
and then python manage.py migrate
Still when the error persisted I tried it with the above suggested command.
Run this command below:
"migrate" with "--run-syncdb" creates tables for apps without migrations.
python manage.py migrate --run-syncdb
This is the full description about "migrate" with "--run-syncdb" :
--run-syncdb
Allows creating tables for apps without migrations. While this isn't recommended, the migrations framework is sometimes too slow on large projects with hundreds of models.
You can check the Django documentation about "migrate" with "--run-syncdb" .
I'm using Django 1.9, SQLite3 and DjangoCMS 3.2 and had the same issue. I solved it by running python manage.py makemigrations
. This was followed by a prompt stating that the database contained non-null value types but did not have a default value set. It gave me two options: 1) select a one off value now or 2) exit and change the default setting in models.py. I selected the first option and gave the default value of 1. Repeated this four or five times until the prompt said it was finished. I then ran python manage.py migrate
. Now it works just fine. Remember, by running python manage.py makemigrations
first, a revised copy of the database is created (mine was 0004) and you can always revert back to a previous database state.
If you get to the bottom of this list and find this answer, I am almost sure it will solve all your issues :) In my case, I had dropped a database table and I was not getting anywhere with makemigrations
and migrate
So I got a very detailed answer on how to reset everything on this link
The Thing that worked for me:
python manage.py makemigrations <appname>
python manage.py migrate <yourappname> --fake
python manage.py makemigrations <appname>
.python manage.py migrate <appname>
This happened to me and for me it was because I added db.sqlite3
as untracked from repository. I added it and pushed it to server so it worked properly. Also run makemigartions
and migrate
after doing this.
In my case, it was solved by resetting the DB (dev environment actually), by running the reset_db
command from Django-Extensions :
python manage.py reset_db
After that I ran the following commands :
python manage.py makemigrations
python manage.py migrate
I'm using Django CMS 3.4 with Django 1.8. I stepped through the root cause in the Django CMS code. Root cause is the Django CMS is not changing directory to the directory with file containing the SQLite3 database before making database calls. The error message is spurious. The underlying problem is that a SQLite database call is made in the wrong directory.
The workaround is to ensure all your Django applications change directory back to the Django Project root directory when changing to working directories.
关闭终端并再次打开它并运行以下命令:
python manage.py migrate (app name)
python manage.py makemigrations
python manage.py makemigrations (appname)
Happened to me. It usually happens when we're doing a lot of changes without checking if each individual changes are correctly applied or not (use migrate and makemigrations after each change in tables/cration of tables).
Now what you can try are -
even if above did not worked then what you can do is - go to migration folder inside your app folder and then delete files that might have caused error(each time you migrate, a new file will be added here to reflect changes, new tables). So find those files and delete those files, which may cause error. And then again apply migrate and makemigrations.
Even if it did not worked, then below code might work.
python manage.py migrate --run-syncdb
Even if above three things did not worked at last, then you should delete db.sqlite3 file which stores your tables and simply create another db.sqlite3 (of course using vs code or pycharm or any coding environment else computer will create text file). Then after creationg another db.splite3,
python manage.py migrate (app name)
python manage.py makemigrations
python manage.py makemigrations (app name)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.