создание django commands

Всем привет, подскажите, пожалуйста. У меня есть файл с вопросами и вариантами ответов. Есть модели вопрос и ответ в джанго. Мне нужно эти данные (csv файл) закинуть вопросы в модель вопроса, ответы в модель ответа. Читаю про django command. Мне чтение файла и его обработку в методе handle делать или отдельно? Идея я так понял в том, чтобы эти данный в цикле записывать в модель (создавать экземпляр класса), верно?

написал отдель csv_reader(), возвращает список из кортежей (первый элемент вопрос, второй словарь из вариантов) Разместил файл в одной папке с файлом командой, пишет, что No such file or directory: 'qs.csv' Что делаю не так?

class Command(BaseCommand):
    help = 'Displays current time'

    def handle(self, *args, **kwargs):
        questions = csv_reader('qs.csv')
        for q in questions:
            Question.objects.create(question_text=q[0])
        for option in questions:
            Choice.objects.create(choice_text=option[1].keys())

а еще если сам файл с классом команды пытаюсь запустить, пишет 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.


Ответы (1 шт):

Автор решения: Roman Konoval

Когда открываете файл на чтение методом open и при этом указываете не полный путь, то файл открывается относительно текущей рабочей директории (current working folder), у каждого процесса такая есть. Посмотреть можно import os; print(os.getcwd()).

Когда запускаете джанго команду выполняя manage.py <command>, то текущая рабочая директория будет та, из которой вы выполняете manage.py и соответственно qs.csv должен находится в той директории, если ваша функция csv_reader просто делает open('qs.csv'), т.е. не добавляет ничего у пути и не меняет сама текущую директорию.

если сам файл с классом команды пытаюсь запустить, пишет django.core.exceptions.ImproperlyConfigured

Это ожидаемо. Основное, что делает manage.py, это устанавливает переменную DJANGO_SETTINGS_MODULE чтобы джанго могла инициализироваться.

→ Ссылка