Проект 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),
)

так, так f, все работало как шарм.

Потом мне пришлось работать с базой данных. у меня есть:

-создал модель данных, набрав в 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

Итак, в этот момент я переместил папку «bookmarks» в 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». НО потом приходит сообщение об ошибке: нет модуля закладок. Поэтому я снова вставил папку «bookmarks» в «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'

Я не вижу, что случилось. Я следовал руководству (за исключением случаев, когда я не мог синхронизировать таблицы и прибегал к вставке папки «закладки» в другое место...) ... и дерево папок кажется довольно стандартным. Почему не находит модуль "закладки"?

Любая помощь будет делать :-) спасибо!


person Sylvain    schedule 02.02.2013    source источник


Ответы (3)


в CharField нет атрибута maxlength. но есть max_length. вам не хватает подчеркивания

person migajek    schedule 02.02.2013

Учебник может быть для более старой версии, где startapp создал папку приложения в каталоге приложения проекта. Теперь он создается в каталоге проекта (внешняя папка django_bookmarks), поэтому ваш SETTINGS.py должен выглядеть так:

INSTALLED_APPS = (
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.sites',
     'bookmarks',
)
person Lysergia25    schedule 02.02.2013
comment
Спасибо за эту помощь! Я изменил его на «закладки», и вместе с точным наблюдением Мигаека (max_length) = это работает! - person Sylvain; 03.02.2013

Внутри INSTALLED_APPS ставьте только bookmarks, а не django_bookmarks.bookmarks. Из-за нового макета в Django 1.4 у меня была такая же проблема год назад...

person Vahid Rafiei    schedule 02.02.2013
comment
Спасибо за эту помощь! Я изменил его на «закладки», и вместе с точным наблюдением Мигаека (max_length) = это работает! - person Sylvain; 03.02.2013