99

我正在使用 Django-CMS 的 Django 项目中构建一个相当简单的应用程序研究。(这是我对项目/应用程序的第一次尝试。)它的主要目的是存储各种智力资产(即研究人员撰写的文章、书籍等)。

问题是,当我将浏览器指向时,/research/我收到一条错误消息,指出table 'research_journal' doesn't exist ("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(请注意,我通过渲染传递了两个对象,忽略我尚未在整个交易中包含类 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)
4

16 回答 16

256

利用:

python manage.py migrate --run-syncdb 

正如Benyamin Jafari在此评论中所述:

--run-syncdb- 为没有迁移的应用程序创建表。

也不要忘记指定应用程序路径。例如:

python manage.py makemigrations app
python manage.py migrate app
于 2016-06-13T22:04:23.810 回答
34

对于 django 1.10,你可能需要做python manage.py makemigrations appname.

于 2016-11-23T16:13:29.753 回答
28

如果有人发现任何建议:

python manage.py makemigrations
python manage.py migrate
python manage.py migrate --run-syncdb

失败,您可能需要migrations在 app 目录中添加一个名为“ ”的文件夹,并创建一个空__init__.py文件。

于 2019-05-03T08:14:02.547 回答
22

我的迁移似乎存在问题。

我跑了./manage.py schemamigration research --auto,发现很多字段都没有指定默认值。

所以,我跑./manage.py schemamigration research --init./manage.py migrate research

从那里重新运行服务器就可以了!

于 2014-09-10T19:22:09.393 回答
8

该问题可以通过运行迁移来解决。

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

每当您在 中进行更改时,请执行上述操作models.py

于 2018-06-22T19:06:42.377 回答
6

当您尚未对新创建的表进行迁移时会出现此错误,因此,首先在 cmd 上写入命令为:python manage.py makemigrations然后编写另一个命令以应用由 makemigrations 命令进行的这些迁移:python manage.py migrate

于 2018-10-28T05:46:12.343 回答
5

运行以下命令为我解决了这个问题

  1. python manage.py migrate
  2. python manage.py makemigrations
  3. python manage.py makemigrations appName
于 2019-06-23T09:55:56.143 回答
3

当我进入管理面板时,我遇到了同样的错误。您应该改为运行它-: python manage.py migrate --run-syncdb。不要忘记包括migrate,我跑了:

python manage.py make migrations接着 python manage.py migrate

仍然当错误仍然存​​在时,我使用上述建议的命令进行了尝试。

于 2018-10-20T17:37:26.157 回答
2

我正在使用 Django 1.9、SQLite3 和 DjangoCMS 3.2 并且遇到了同样的问题。我通过运行解决了它python manage.py makemigrations。紧随其后的是一个提示,指出数据库包含非空值类型但没有设置默认值。它给了我两个选项:1) 现在选择一次性值或 2) 退出并更改 models.py 中的默认设置。我选择了第一个选项,并给出了默认值 1。重复此操作四五次,直到提示说完成。然后我跑了python manage.py migrate。现在它工作得很好。请记住,python manage.py makemigrations首先运行,会创建数据库的修订副本(我的是 0004),并且您始终可以恢复到以前的数据库状态。

于 2016-04-26T21:26:10.667 回答
2

对我有用的东西:

  1. 如果没有在 models.py 中添加类,请找出迁移文件夹中的哪些迁移创建了表。
  2. 如果该类已存在于您的 models.py 中,请尝试删除该类并运行python manage.py makemigrations <appname>
  3. 在迁移假迁移时,您的错误可能会说找不到要删除的表python manage.py migrate <yourappname> --fake
  4. 再次添加类并再次进行迁移python manage.py makemigrations <appname>
  5. 最后再次迁移python manage.py migrate <appname>
于 2020-09-02T16:20:20.647 回答
1

这发生在我身上,对我来说,这是因为我db.sqlite3从存储库中添加为未跟踪。我添加它并将其推送到服务器,以便它正常工作。也运行makemigartionsmigrate在这样做之后。

于 2018-08-25T13:28:03.030 回答
1

如果您到达此列表的底部并找到此答案,我几乎可以肯定它会解决您的所有问题makemigrations:)migrate

因此,我得到了有关如何重置此链接上所有内容的非常详细的答案

于 2020-08-26T12:26:31.340 回答
0

就我而言,它是通过从Django-Extensionsreset_db运行命令来重置数据库(实际上是开发环境)来解决的:

python manage.py reset_db

之后我运行了以下命令:

  1. python manage.py makemigrations
  2. python manage.py migrate
于 2021-07-03T05:51:04.410 回答
0

在下面运行此命令:

“migrate” 和 “--run-syncdb” 为没有迁移的应用程序创建表。

python manage.py migrate --run-syncdb 

这是关于“迁移”“--run-syncdb”的完整描述:

--运行-同步数据库

允许为无需迁移的应用创建表。虽然不建议这样做,但迁移框架有时在具有数百个模型的大型项目上太慢。

您可以使用“--run-syncdb”查看有关“迁移”的 Django 文档

于 2022-03-02T12:03:27.913 回答
0

我将 Django CMS 3.4 与 Django 1.8 一起使用。我逐步了解了 Django CMS 代码中的根本原因。根本原因是 Django CMS 在进行数据库调用之前没有将目录更改为包含 SQLite3 数据库的文件的目录。错误消息是虚假的。根本问题是在错误的目录中进行了 SQLite 数据库调用。

解决方法是确保所有 Django 应用程序在切换到工作目录时都将目录切换回 Django Project 根目录。

于 2016-09-15T19:12:37.840 回答
0

关闭终端并再次打开它并运行以下命令:

  1. python manage.py migrate (app name)
  2. python manage.py makemigrations
  3. python manage.py makemigrations (appname)
于 2021-10-23T06:31:26.463 回答