Невозможно загрузить модель Django из отдельного каталога в сценарий базы данных
У меня возникают трудности с написанием скрипта на python, который берет каталог .txt файлов и загружает их в мою базу данных, которая используется в проекте Django. Исходя из требований, скрипт python должен быть расположен в отдельной директории, а не в директории api (моя директория django).
Вот структура моего проекта на данный момент:
Main-Project/
database/
text-script.py
text-files/
example-file.txt
django/
django/
settings.py
snippets/
models.py
Мой файл text-script.py выглядит следующим образом:
import os
import sys
import django
current_dir = os.path.dirname(os.path.abspath(__file__))
parent_dir = os.path.dirname(current_dir)
sys.path.append(parent_dir)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django.django.settings')
django.setup()
from django.snippets.models import Snippet
def import_articles(directory):
for filename in os.listdir(directory):
if filename.endwith('.txt'):
with open(os.path.join(directory, filename), 'r') as file:
content = file.read()
Snippet.objects.create(filename=filename, content=content)
if __name__ == '__main__':
text_dir = os.path.join(current_dir, 'text-files')
import_articles(text_dir)
Мои установленные приложения выглядят следующим образом:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'snippets.apps.SnippetsConfig',
]
При попытке запустить скрипт я получаю следующую ошибку:
ModuleNotFoundError: No module named 'snippets'
Как правильно загрузить модель Snippet из проекта Django, чтобы она использовала ту же базу данных, которая используется в моем проекте Django?
Я только что выяснил это, конечно же, сразу после того, как наконец-то опубликовал вопрос! Я устанавливал корневой каталог django в неправильную директорию. Мне нужно было установить его так
current_dir = os.path.dirname(os.path.abspath(__file__))
parent_dir = os.path.dirname(current_dir)
root_dir = os.path.join(parent_dir, 'api')
sys.path.append(root_dir)
Теперь это работает!
Строка, ответственная за ошибку, - from django.snippets.models import Snippet
.
Который должен быть таким, как показано ниже.
from ..django.snippets.models import Snippet
Вы должны использовать относительные пути для импорта скриптов внутри вашего проекта.