我有一个叫Assignment的模型。每个作业可以包含多个不同类型的问题。也就是说,一个作业可以有多项选择题、问答题、真题或假题。
每种问题类型都有自己的模型。当然,它们与ForeignKey的赋值有关。
我如何将它们与赋值关联起来,以便获得所有问题(不同类型),例如,我需要做的就是调用:
assignment1.questions.all()
我已经看到一些关于GenericForeignKey、ContentType等东西的文章,但我还没有让它们工作起来。
如下所示:
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)因此,我可以通过执行assignment1.questions.all()获得assignment实例的所有问题,例如,如上所述
发布于 2021-01-11 10:09:27
你为什么不这样做呢:
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。这取决于你想要实现的目标和你所处的场景。
https://stackoverflow.com/questions/65657807
复制相似问题