Создание базы данных django_admin после того, как команда sql устарела
Я использовал django 1.3 и python 2.4 для масштабного проекта. Я решил обновить его до django 1.9 и python 2.7.
Поскольку параметр sql django_admin устарел в 1.9, метод создания обновленной базы данных сильно изменился.
Я использую команду:
python /usr/local/django/<project>/manage.py migrate --fake-initial --noinput --run-syncdb
для создания таблицы. Но мои таблицы не созданы, и управление печатает эту ошибку.
Traceback (most recent call last):
File "/src/project/project-export/django/projectadmin/manage.py", line 13, in <module>
execute_from_command_line(sys.argv)
File "/opt/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
utility.execute()
File "/opt/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 345, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/opt/python/lib/python2.7/site-packages/django/core/management/base.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "/opt/python/lib/python2.7/site-packages/django/core/management/base.py", line 398, in execute
self.check()
File "/opt/python/lib/python2.7/site-packages/django/core/management/base.py", line 426, in check
include_deployment_checks=include_deployment_checks,
File "/opt/python/lib/python2.7/site-packages/django/core/checks/registry.py", line 75, in run_checks
new_errors = check(app_configs=app_configs)
File "/opt/python/lib/python2.7/site-packages/django/core/checks/urls.py", line 13, in check_url_config
return check_resolver(resolver)
File "/opt/python/lib/python2.7/site-packages/django/core/checks/urls.py", line 23, in check_resolver
for pattern in resolver.url_patterns:
File "/opt/python/lib/python2.7/site-packages/django/utils/functional.py", line 33, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/opt/python/lib/python2.7/site-packages/django/core/urlresolvers.py", line 417, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/opt/python/lib/python2.7/site-packages/django/utils/functional.py", line 33, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/opt/python/lib/python2.7/site-packages/django/core/urlresolvers.py", line 410, in urlconf_module
return import_module(self.urlconf_name)
File "/opt/python/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/usr/local/django/projectadmin/projectadmin/urls.py", line 4, in <module>
import projectadmin.views
File "/usr/local/django/projectadmin/projectadmin/views.py", line 20, in <module>
from projectadmin.forms import UserCreationForm
File "/usr/local/django/projectadmin/projectadmin/forms.py", line 252, in <module>
class UserCreationForm(forms.ModelForm):
File "/usr/local/django/projectadmin/projectadmin/forms.py", line 256, in UserCreationForm
template_choice = form_utils.create_template_choices_field()
File "/usr/local/django/projectadmin/projectadmin/form_utils.py", line 15, in create_template_choices_field
choices = [(x.id, x.template_name) for x in all_templates]
File "/opt/python/lib/python2.7/site-packages/django/db/models/query.py", line 258, in __iter__
self._fetch_all()
File "/opt/python/lib/python2.7/site-packages/django/db/models/query.py", line 1074, in _fetch_all
self._result_cache = list(self.iterator())
File "/opt/python/lib/python2.7/site-packages/django/db/models/query.py", line 52, in __iter__
results = compiler.execute_sql()
File "/opt/python/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 848, in execute_sql
cursor.execute(sql, params)
File "/opt/python/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/opt/python/lib/python2.7/site-packages/django/db/utils.py", line 95, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/opt/python/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/opt/python/lib/python2.7/site-packages/django/db/backends/mysql/base.py", line 112, in execute
return self.cursor.execute(query, args)
File "/opt/python/lib/python2.7/site-packages/MySQLdb/cursors.py", line 205, in execute
self.errorhandler(self, exc, value)
File "/opt/python/lib/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
django.db.utils.ProgrammingError: (1146, "Table 'project.projectadmin_usertemplate' doesn't exist")
В ошибке нет ничего связанного с созданием таблицы. Он жалуется на отсутствие таблицы, но не создает ее.
Я подозреваю что INSTALLED_APPS
не включает мои таблицы, но я добавил приложение к списку в моем settings.py
, Я подозревал, что мне нужно добавить свое приложение отдельно installed_apps
список.
Я следовал рекомендуемой процедуре самого django при обновлении системы.
Если мои подозрения верны, как я могу добавить модели в установленные приложения, или любые другие предложения были бы хорошими?
1 ответ
Благодаря списку рассылки django-user я понял, что моя проблема заключается в попытке сослаться на еще не созданную таблицу перед ее созданием. "еще до того, как он начнет применять миграции, Django должен импортировать все ваши пакеты, чтобы он мог определить, какие миграции ему необходимо применить. Однако в процессе их импорта вы уже выполняете запросы базы данных к этим таблицам". Помещение этих ссылочных полей в блок try catch, перехватывающий исключение " ProgrammingError", решило мою проблему.