首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django模型与不同类型的对象相关

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

Stack Overflow用户
提问于 2021-01-11 03:52:25
回答 1查看 90关注 0票数 0

我有一个叫Assignment的模型。每个作业可以包含多个不同类型的问题。也就是说,一个作业可以有多项选择题、问答题、真题或假题。

每种问题类型都有自己的模型。当然,它们与ForeignKey的赋值有关。

我如何将它们与赋值关联起来,以便获得所有问题(不同类型),例如,我需要做的就是调用:

assignment1.questions.all()

我已经看到一些关于GenericForeignKey、ContentType等东西的文章,但我还没有让它们工作起来。

如下所示:

代码语言:javascript
复制
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实例的所有问题,例如,如上所述

EN

回答 1

Stack Overflow用户

发布于 2021-01-11 10:09:27

你为什么不这样做呢:

代码语言:javascript
复制
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。这取决于你想要实现的目标和你所处的场景。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65657807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档