Загрузка данных в БД django
Всем привет. Мне нужно загрузить данные из файла по команде в БД. Подскажите, пожалуйста как правильно.
Модели
class Question(models.Model):
question_text = models.CharField(verbose_name='Вопрос', max_length=250)
choice = models.ManyToManyField('Choice')
class Choice(models.Model):
choice_text = models.CharField(max_length=200)
next_question = models.ForeignKey(Question, on_delete=models.CASCADE,
related_name='linked_choice')
В файле есть вопросы и варианты ответов. Вью подает вопрос и варианты ответов из бд пользователю на выбор. Мне нужно заполнить эти модели данными. Написал команду, questions - список кортежей, кортеж из двух элементов состоит: вопрос и словарь с вариантами.
def handle(self, *args, **kwargs):
questions = self.csv_reader(data)
for question in questions:
answers = set(question[1].keys())
for option in answers:
Question.objects.create(question_text=question[0],
choice=Choice.objects.create(
choice_text=option))
TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use choice.set() instead.
Ошибку выдает. Еще сложность в том, что довольно сложная структура получается, если через админку попытаться добавить вопросы, то нужно ввести вопрос, затем создать вариант ответа, кот требует ввести след вопрос(next_question), кот требует снова ввести вопрос вариант ответа итд
Ответы (1 шт):
Он же тебе пишет, что для отношений ManyToMany нужно отдельно заносить с помощью метода set
Вообще по твоим циклам получается, что для каждого варианта ответа ты создаешь свой отдельный вопрос.
for question in questions:
question_obj = Question.objects.create(question_text=question[0])
answers = []
for option in question[1].keys():
answers.append(Choice.objects.create(choice_text=option))
question_obj.choice.set(answers)
Судя по файлу загрузки, если ты сделаешь inline в админке, то вводить будет достаточно удобно.