0

我对编程还是很陌生,我担心我在叫错树。我正在尝试编写一个多项选择测验应用程序。我有 5000 个不同的单词及其定义。我做了两本词典。一个带有单词定义,一个带有 4 个选项 - 其中 1 个是正确答案。

我已经写好了模型类。我还生成了一个 txt 文件,可以将其复制到 django shell 中。这将定义链接到 4 个可能的答案,并将 True 分配给正确的答案。但是由于词多,所以想自动进入django shell。我可以这样做吗?

首先,我尝试编写一个批处理文件,但是一旦打开 shell,它就不起作用了。

我也试过读这个:

https://docs.djangoproject.com/en/1.9/howto/custom-management-commands/

我编写了一个我知道行不通的完整代码!我不太明白上面链接中发生了什么。或者即使它适合我的目的。

无论如何,这是我生成的文本。我可以将它逐行复制到 django shell 中。它会做我想做的事(或者至少我认为我想做的事——据我所知,我可能会以错误的方式去做!)但显然我想一键完成,而不是复制和粘贴 30000 行文本.

from quiz.models import Question, Class
    q1=Question(question_text="used to refer to somebody/something that has already been mentioned or is easily understood,")
    q1.save()
    q1.choice_set.create(choice_text='the', rorwrong=True)
    q1.choice_set.create(choice_text='be', rorwrong=False)
    q1.choice_set.create(choice_text='of', rorwrong=False)
    q1.choice_set.create(choice_text='a', rorwrong=False)
    ....
    q1849=Question(question_text="to be frightened of somebody/something or frightened of doing something,")
    q1849.save()
    q1849.choice_set.create(choice_text='detail', rorwrong=False)
    q1849.choice_set.create(choice_text='fear', rorwrong=True)
    q1849.choice_set.create(choice_text='beautiful', rorwrong=False)
    q1849.choice_set.create(choice_text='institution', rorwrong=False)

这是我的模型类:

from django.db import models

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    def __str__(self):
        return(self.question_text)


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    rorwrong = models.BooleanField(default=False)
    def __str__(self):
        return(self.choice_text)
4

1 回答 1

1

定义管理命令确实是执行此类任务所需要的。我会将您的数据放入 CSV 文件中,然后他们将其导入如下:

# myapp/management/commands/import_questions.py
import csv

from django.core.management.base import BaseCommand
from myapp.models import Question

class Command(BaseCommand):

    def add_arguments(self, parser):
        parser.add_argument('csvfile', nargs='+', type=str)

    def handle(self, *args, **options):
        for f in options['csvfile']:
            with open(f) as csvfile:
                reader = csv.reader(csvfile)
                for row in reader:
                    # Say the CSV rows are as follows: 
                    # <Question title>, <Answer1Text>, <Answer1Correct> ... etc 
                    q = Question(question_text=row[0])
                    q.save()
                    q.choice_set.create(choice_text=row[1], rorwrong=bool(row[2]))
                    q.choice_set.create(choice_text=row[3], rorwrong=bool(row[4])) 
                    # Etc for the rest of them

然后,您将使用以下命令执行此命令:

./manage.py import_questions --csvfile data.csv
于 2016-08-03T04:37:40.400 回答