1

我正在设置一个简单的 Django 应用程序——一个测验。问题和答案来自经过扫描、OCR 和解析的打印样本测试。我已经将它们解析为 Python 对象,如下所示:

class Quiz(object):
    def __init__(self, name):
        self.name = name
        self.questions = {}
class Question(object):
    def __init__(self, text):
        self.text = text
        self.answers = {}
class Answer(object):
    def __init__(self, text, value= -1.0, explanation=""):
        self.text = text
        self.value = value
        self.explanation = explanation

但是我的 Django 模型,由于模型字段无法拥有“列表”,因此使用外键来保持测验之间的关系-

class Quiz(models.Model):
    name = models.CharField(max_length=256)
class Question(models.Model):
    quiz = models.ForeignKey(quiz)
    order = models.IntegerField()
    text = models.TextField()
class Answer(models.Model):
    question = models.ForeignKey(question)
    order = models.IntegerField()
    text = models.TextField()
    explanation = models.TextField()
    value = models.FloatField()

有人可以建议一种从前者到后者的直接方法吗?谢谢。

4

1 回答 1

0

要问自己的第一个问题是为什么要使用这些中间类?这听起来像是糟糕的设计。

一旦我们超越了糟糕的设计。您的代码显示 qustion.answers 是字典而不是列表,我假设您只是打错了字。

如果您有一个测验模型实例,您可以调用Quiz.question_set.all()以获取该测验的所有问题。此调用的结果将是一个查询集,它是一个可迭代对象,因此调用list(Quiz.question_set.all())将为您提供一个列表。

尽管您做错了并且很可能只是取消了中间人,但我怎么强调都不为过。此外,PEP8 命名规则非常适合遵循,即类的命名如下:

class Quiz(models.Model):
    ...

遵循约定会让你的生活更轻松=)

于 2011-10-06T03:51:50.570 回答