我有一个名为 t = new Date('Monday, Jan 11')
Thu Jan 11 2001 00:00:00 GMT+0000 (Greenwich Mean Time)
的模型。每个作业可以包含多个不同类型的问题。也就是说,作业可以有多项选择题、作文题、真题或假题。
每种问题类型都有自己的模型。当然,它们与Assignment
的赋值有关。
我如何将它们与作业相关联,以便获得所有(不同类型的)问题,例如,调用:
ForeignKey
我已经看到一些关于 GenericForeignKey、ContentType 等内容的文章,但我还没有让它们发挥作用。
像这样:
assignment1.questions.all()
因此,我可以通过执行 class Assignment(models.Model):
# ...assignment fields
class MultipleChoiceQuestion(models.Model):
assignment = models.ForeignKey(Assignment)
class TrueOrFalseQuestion(models.Model):
assignment = models.ForeignKey(Assignment)
class EssayQuestion(models.Model):
assignment = models.ForeignKey(Assignment)
来获取作业实例的所有问题,例如,如上所述
答案 0 :(得分:1)
你为什么不做这样的事情:
class Assignment(models.Model):
m_question = models.ManyToMany("MultipleChoiceQuestion")
tf_question = models.ManyToMany("TrueOrFalseQuestion")
e_question = models.ManyToMany("EssayQuestion")
[...]
def __str__(self):
all_m_questions = ", ".join(str(q) for q in self.m_question.all())
return "{},{}".format(self.type, all_m_questions) #etc...
class MultipleChoiceQuestion(models.Model):
name=...
class TrueOrFalseQuestion(models.Model):
name=...
class EssayQuestion(models.Model):
name=...
?通过这种方式,您可以访问特定作业的不同类型的问题。 (另见ManyToMany Relationships. Returning fields in def __str__ method)
此解决方案的另一个解决方案/集成是使用我在评论中提到的 through_field
。这取决于想要实现的目标和您所处的场景。