Проект Django - не может синхронизировать таблицы данных - syncdb (ошибка: нет модуля с именем XYZ)
Я следую учебному пособию по Django, которое представляет собой серию коротких задач, которые ведут к созданию веб-приложения для управления закладками.
До сих пор я: - правильно установил Django 1.4.2 - создал проект и его папки (будь ниже, мой вопрос связан с этим...) - настроил движок базы данных (sqlite3) - определил views.py, чтобы показать простой сообщение на веб-странице (Поздравляем, вы создали веб-страницу...) - определили запись для главной страницы в urls.py. Увидеть ниже:
from django.conf.urls.defaults import *
from bookmarks.views import *
urlpatterns = patterns('',
(r'^$', main_page),
)
итак, все работает как шарм.
Тогда мне пришлось работать над базой данных. Я:
-создал модель данных, набрав в файле models.py следующее:
from django.db import models
class Link(models.Model):
url = models.URLField(unique=True)
-установленные приложения определены в settings.py следующим образом:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django_bookmarks.bookmarks',
)
вот сложная часть. Мне пришлось синхронизировать таблицы данных. Поэтому я напечатал:
manage.py syncdb
но я получил сообщение об ошибке: модуль закладок отсутствует
Итак, я проверил структуру папок, и это было следующим
django_bookmarks
├── bookmarks
│ ├── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── django_bookmarks
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
Итак, в этот момент я переместил папку "закладки" в django_bookmarks (подпапка). Когда я сделал "syncdb", он работал нормально. Затем я заменил "закладки" на прежнее место, как показано на дереве выше. Поэтому я продолжаю думать, что победил...
Затем мне пришлось работать над моделью данных Bookmark Data. Я следовал указаниям руководства и набрал в bookmarks/models.py следующее:
from django.contrib.auth.models import User
class Bookmark(models.Model):
title = models.CharField(maxlength=200)
user = models.ForeignKey(User)
link = models.ForeignKey(Link)
Чтобы создать таблицу, мне снова пришлось набирать "manage.py syncdb". НО тогда приходит сообщение об ошибке: нет модуля закладок. Поэтому я снова вставил папку "закладки" в "django_bookmarks" (подпапку), думая, что это будет работать… но это не так… он напечатал около 17 строк (обратная связь Python), из которых строка 15 (или 16…) было о models.py (models.CharField(maxlength=200)) и строке в
Python27/lib/site-packages/django/db/models/fields/__init__
и самое последнее сообщение:
TypeError: __init__() got an unexpected keyword argument 'maxlength'
Я не вижу, что не так. Я следовал руководству (за исключением случаев, когда я не мог синхронизировать таблицы и прибегал к вставке папки "закладки" в другом месте...) ... и дерево папок кажется довольно стандартным. Почему он не находит модуль "закладки"?
Любая помощь подойдет:-) спасибо!
3 ответа
Нет никаких maxlength
атрибут CharField. но есть max_length
, вам не хватает подчеркивания
Учебное пособие может быть для более старой версии, где startapp создал папку приложения в каталоге приложения проекта. Теперь он создается в каталоге проекта (внешняя папка django_bookmarks), поэтому ваш файл SETTINGS.py должен выглядеть так:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'bookmarks',
)
В INSTALLED_APPS
только поставить bookmarks
скорее, чем django_bookmarks.bookmarks
, Из-за нового макета в Django 1.4 у меня была такая же проблема год назад...