Django模型与不同类型的对象相关

时间:2021-01-10 19:52:25

标签: django django-models django-rest-framework django-views django-forms

我有一个名为 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) 来获取作业实例的所有问题,例如,如上所述

1 个答案:

答案 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。这取决于想要实现的目标和您所处的场景。

相关问题