Где строить объекты базы данных в Django (без использования оболочки)? - PullRequest
1 голос
/ 16 февраля 2020

Я создал свои модели базы данных в моем файле model.py, но я хочу иметь возможность заполнять их данными. У меня есть написанный код, который считывает данные из текстового файла, который у меня есть, и создает объекты для моих моделей. Но я не уверен, где на самом деле запустить этот код, все учебники, которые я могу найти, они только создают объекты через оболочку, но так как я читаю из текстового файла и так как код довольно длинный, я не хочу использовать ракушка. Мое решение состояло в том, чтобы создать файл с именем buildDB в папке моего приложения и запустить там код, но это не сработает:

, если я попытаюсь импортировать свои модели поверх файла, используя from .models import * Я получаю ImportError: attempted relative import with no known parent package когда я его запускаю. Если я пытаюсь использовать from applicatonName.models import*, я получаю

django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings. 

Когда я гуглю второе сообщение об ошибке, может случиться так, потому что я не использую manage.py shell, а первое сообщение об ошибке я даже не знать. Нужно ли использовать оболочку для заполнения базы данных? Куда бы я положил свой код, если нет?

1 Ответ

2 голосов
/ 17 февраля 2020

a) Похоже, вы должны написать миграцию данных: https://docs.djangoproject.com/en/3.0/topics/migrations/#data -migrations

b) Другой вариант - написать «пользовательскую команду»: https://docs.djangoproject.com/en/3.0/howto/custom-management-commands/

c) И, наконец, вы можете написать внешний скрипт, который инициализирует django и создает все объекты модели из файла: просто скрипт python в той же папке, что и django проект (или в папке scripts), который запускает django.setup() в начале. Этот скрипт может импортировать и использовать модели и ORM, а также создавать все объекты базы данных.

Вы попытались (c) безуспешно, потому что вы пропустили деталь django.setup().

Если это какие-то данные, которые должны быть изначально заполнены в каждом экземпляре приложения (например, для тестирования, подготовки к работе и производства), то я бы выбрал)

Если вам придется загружать похожие файлы из время от времени, и файл каждый раз отличается, может быть, б) или c). Два последних варианта очень похожи, и, вероятно, пользовательская команда более понятна (хотя вам нужно прочитать документы о написании пользовательских команд)

...