我正在设置一个简单的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()
有人可以建议一种从前者到后者的简单方法吗?感谢。
答案 0 :(得分:0)
问自己的第一个问题是你为什么要使用这些中间类?这听起来像糟糕的设计。
一旦我们走过了糟糕的设计。你的代码显示qustion.answers是一个字典而不是列表,我假设你刚刚写了一个错字。
如果您有测验模型实例,可以致电Quiz.question_set.all()
以获取该测验的所有问题。这个调用的结果将是一个查询集,它是一个可迭代的对象,因此调用list(Quiz.question_set.all())
会给你一个列表。
我无法强调,尽管你做错了,而且很可能只是在取消中间人。此外,PEP8命名规则是一个非常好的主意,即类的命名如下:
class Quiz(models.Model):
...
它会让你的生活更容易遵循惯例=)