Ich baue in meinem Django-Projekt eine ziemlich einfache Anwendung, Recherche, die Django-CMS verwendet. (Es ist mein erster grundlegender Versuch, ein Projekt / eine Anwendung zu erstellen.) Der Hauptzweck besteht darin, verschiedene geistige Vermögenswerte (z. B. Artikel, Bücher usw., die von einem Forscher geschrieben wurden) zu speichern.
Das Problem ist, dass wenn ich den Browser auf / research / zeige, eine Fehlermeldung angezeigt wird, dass die Tabelle 'research_journal' nicht existiert ("keine solche Tabelle").
Ich verwende Djnago 1.6.5 mit einer SQLite3-Datenbank.
Mit Blick auf die python manage.py sql research
Renditen:
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;
Ich bin gelaufen python manage.py migrate research
und habe:
/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)
Ich bin gelaufen python manage.py syncdb
und habe folgendes bekommen:
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)
Hier ist die 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)
Hier ist meine Ansicht.
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})
Hier ist die url.py der Anwendung:
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'),
)
Hier ist die Vorlage 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 %}
Nur für den Fall, dass es wichtig ist, hier ist meine 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)
Gedanken? Jede Hilfe wäre sehr dankbar.
quelle
./manage.py sqlclear research | ./manage.py dbshell
gefolgt von./manage.py syncdb
, was den Forschungstisch räumte. Letztendlich hat das auch nicht funktioniert. Siehe meine Lösung unten ...Antworten:
Dieser Kommentar auf dieser Seite hat für mich und einige andere funktioniert. Es verdient seine eigene Antwort:
python manage.py migrate --run-syncdb
quelle
python makemigrations
zuerst--run-syncdb
Option?--run-syncdb
-> Erstellt Tabellen für Apps ohne Migrationen..py
und.pyc
Migrationsdateien<app_dir>/migrations
vor dem Ausführenmakemigrations
und den obigen Befehl entfernen .Für Django 1.10 müssen Sie möglicherweise tun
python manage.py makemigrations appname
.quelle
Anscheinend gab es ein Problem mit meiner Migration.
Ich lief
./manage.py schemamigration research --auto
und stellte fest, dass in vielen Feldern keine Standardeinstellung angegeben war.Also rannte ich
./manage.py schemamigration research --init
gefolgt von./manage.py migrate research
Das erneute Ausführen des Servers von dort aus hat den Trick getan!
quelle
Wenn jemand feststellt, dass einer der vorgeschlagenen:
python manage.py makemigrations
python manage.py migrate
python manage.py migrate --run-syncdb
Wenn dies fehlschlägt, müssen Sie möglicherweise einen Ordner mit dem Namen "
migrations
" im App-Verzeichnis hinzufügen und eine leere__init__.py
Datei erstellen .quelle
Das Problem kann durch Ausführen von Migrationen behoben werden.
python manage.py makemigrations
python manage.py migrate
Führen Sie die oben genannten Vorgänge aus, wenn Sie Änderungen an vornehmen
models.py
.quelle
Dieser Fehler tritt auf, wenn Sie keine Migrationen in Ihre neu erstellte Tabelle vorgenommen haben. Schreiben Sie also zuerst den Befehl auf cmd als:
python manage.py makemigrations
und schreiben Sie dann einen weiteren Befehl zum Anwenden dieser mit dem Befehl makemigrations vorgenommenen Migrationen:python manage.py migrate
quelle
Das Ausführen der folgenden Befehle löste dieses Problem für mich: 1. python manage.py migrate 2. python manage.py makemigrations 3. python manage.py makemigrations appName
quelle
Ich verwende Django 1.9, SQLite3 und DjangoCMS 3.2 und hatte das gleiche Problem. Ich habe es durch Laufen gelöst
python manage.py makemigrations
. Darauf folgte eine Eingabeaufforderung, die besagte, dass die Datenbank Werttypen ungleich Null enthielt, jedoch keinen Standardwert festgelegt hatte. Es gab mir zwei Möglichkeiten: 1) Wählen Sie jetzt einen einmaligen Wert oder 2) Beenden Sie und ändern Sie die Standardeinstellung in models.py. Ich habe die erste Option ausgewählt und den Standardwert 1 angegeben. Wiederholen Sie diesen Vorgang vier oder fünf Mal, bis die Eingabeaufforderung anzeigt, dass der Vorgang abgeschlossen ist. Ich rannte dannpython manage.py migrate
. Jetzt funktioniert es gut. Denken Sie daran, dass beimpython manage.py makemigrations
ersten Ausführen eine überarbeitete Kopie der Datenbank erstellt wird (meine war 0004) und Sie jederzeit zu einem vorherigen Datenbankstatus zurückkehren können.quelle
Ich habe den gleichen Fehler erhalten, als ich zum Admin-Panel ging. Sie sollten dies stattdessen ausführen :
python manage.py migrate --run-syncdb
. Vergessen Sie nicht, migrate einzuschließen , ich lief:python manage.py make migrations
und dannpython manage.py migrate
Als der Fehler weiterhin bestand, versuchte ich es mit dem oben vorgeschlagenen Befehl.
quelle
Dies ist mir passiert und für mich war es, weil ich
db.sqlite3
als nicht verfolgt aus dem Repository hinzugefügt habe . Ich fügte es hinzu und schob es auf den Server, damit es richtig funktionierte. Laufen Sie auchmakemigartions
undmigrate
danach.quelle
Ich verwende Django CMS 3.4 mit Django 1.8. Ich habe die Grundursache im Django CMS-Code durchgearbeitet. Die Hauptursache ist, dass das Django CMS das Verzeichnis nicht in das Verzeichnis mit der Datei ändert, die die SQLite3-Datenbank enthält, bevor Datenbankaufrufe ausgeführt werden. Die Fehlermeldung ist falsch. Das zugrunde liegende Problem besteht darin, dass ein SQLite-Datenbankaufruf im falschen Verzeichnis erfolgt.
Die Problemumgehung besteht darin, sicherzustellen, dass alle Ihre Django-Anwendungen das Verzeichnis wieder in das Stammverzeichnis des Django-Projekts ändern, wenn Sie in Arbeitsverzeichnisse wechseln.
quelle
Wenn Sie am Ende dieser Liste ankommen und diese Antwort finden, bin ich fast sicher, dass sie alle Ihre Probleme lösen wird :) In meinem Fall hatte ich eine Datenbanktabelle gelöscht und kam mit
makemigrations
und nicht weitermigrate
Also habe ich eine sehr detaillierte Antwort bekommen, wie man alles über diesen Link zurücksetzt
quelle
Das, was für mich funktioniert hat:
python manage.py makemigrations <appname>
python manage.py migrate <yourappname> --fake
python manage.py makemigrations <appname>
.python manage.py migrate <appname>
quelle