





В дополнение к файлам ваших собственных моделей вам также необходимо импортировать модуль настроек.
Импортируйте и свой модуль настроек
import os
os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"
from mysite.polls.models import Poll, Choice
должен сделать свое дело.
Если вы используете аргумент shell для сценария manage.py в каталоге вашего проекта, вам не нужно импортировать настройки вручную:
$ cd mysite/
$ ./manage.py shell
Python 2.5.2 (r252:60911, Jun 10 2008, 10:35:34)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from myapp.models import *
>>>
Для неинтерактивного использования вы можете реализовать настраиваемая команда и запустить его с manage.py.
Это то, что у меня есть в верхней части одного из моих скриптов загрузки данных.
import string
import sys
try:
import settings # Assumed to be in the same directory.
#settings.DISABLE_TRANSACTION_MANAGEMENT = True
except ImportError:
sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
sys.exit(1)
#Setup the django environment with the settings module.
import django
import django.core.management
django.core.management.setup_environ(settings)
from django.db import transaction
Все это должно выполняться до того, как вы сделаете что-нибудь еще в своем скрипте.
Другой метод - использовать фикстуры и manage.py. Хотя, если вы просто пытаетесь выполнить массовую загрузку данных для инициализации базы данных, это должно работать нормально.
Кроме того, в зависимости от того, что вы делаете, вы можете или не хотите делать все это за одну транзакцию. Раскомментируйте строку транзакции выше и структурируйте свой код, как это.
transaction.enter_transaction_management()
try:
#Do some stuff
transaction.commit()
finally:
transaction.rollback()
pass
transaction.leave_transaction_management()
+1, при запуске в корне моего проекта принятый выше ответ не работает, а ваш - работает!
Разве строка «sys.exit (1)» не должна иметь отступ?
Самое чистое решение - добавить расширения django.
(virt1)tsmets@calvin:~/Documents/prive/rugby-club/proposal/kitu$ yolk -l Django - 1.3.1 - active Pygments - 1.4 - active Python - 2.6.5 - active development (/usr/lib/python2.6/lib-dynload) django-extensions - 0.7.1 - active pip - 1.0.2 - active setuptools - 0.6c11 - active wsgiref - 0.1.2 - active development (/usr/lib/python2.6) yolk - 0.4.1 - active
Список возможных команд затем расширяется, среди прочего, командой runscript.
Если я чего-то не упускаю, в manage.py нет подкоманды runscript в Django 1.0. Если вы используете настраиваемое приложение для обеспечения этой функциональности, вы должны упомянуть об этом.