Ошибка импорта автономного скрипта django - PullRequest
1 голос
/ 22 августа 2010

У меня есть рабочий сайт django, и я пытаюсь запустить автономный скрипт над его данными. Я следую этой статье, но не могу заставить ее работать. Я пробовал два подхода:

1)

import sys, os
sys.path.append(os.path.abspath('..'))

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

from mysite.main.models import Image
#from main.models import Image #should work too

2)

import sys, os
sys.path.append(os.path.abspath('..'))

from django.core.management import setup_environ 
from mysite import settings
#import settings #should work too
setup_environ(settings)

from mysite.main.models import Image

И то и другое выдает мне «AttributeError: у объекта 'module' нет атрибута 'models'", извлеченного из модуля, который я пытаюсь импортировать (main.models).

Сам скрипт находится в корне проекта рабочего сайта, с правильно установленным и работающим «основным» приложением. Не должно быть проблем с настройками или моделями.

Ответы [ 3 ]

4 голосов
/ 22 июня 2011

Я боролся с очень похожей ошибкой, и этот фрагмент кода оболочки Django (shell.py) сделал это для меня:

from django.db.models.loading import get_models
loaded_models = get_models()

Поместите его перед импортом класса модели.

0 голосов
/ 10 октября 2012

Просто клонируйте свой файл manage.py.Оставьте последние две строки строки и добавьте ваш код в конец.Работает как шарм!Например, мой теперь содержит следующее, которое выводит данные из одного из моих элементов базы данных,

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "conf.settings_dev")
  #from django.core.management import execute_from_command_line
  #execute_from_command_line(sys.argv)
  from events.models import Event
  e = Event.objects.get(id="testID")
  print e.eventTitle

Я подозреваю, что может быть более официальный (и запутанный) способ сделать что-то, но это хорошее местоначать в то же время.

0 голосов
/ 22 августа 2010

Я не вижу причин, по которым ваше import утверждение не должно работать.Убедитесь, что структура модуля соответствует команде import.Путь к модулю должен быть mysite -> main -> models.Некоторые разработчики добавляют дополнительный apps модуль в проект, так что путь становится mysite -> apps -> main -> models.Убедитесь, что это не так.

Для проверки выполните следующие действия из оболочки Django , а также из REPL Python.не работает, вам нужно устранить неполадки в структуре вашего модуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...