django - Django模型与不同类型的对象相关
问题描述
我有一个模型叫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()
,例如,如上所述
解决方案
你为什么不做这样的事情:
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=...
? 通过这种方式,您可以访问特定作业的不同类型的问题。(另见多对多关系。在 def __str__ 方法中返回字段)
该解决方案的另一个解决方案/集成是使用through_field
我在评论中提到的 a 。这取决于想要实现的目标和您所处的场景。
推荐阅读
- c# - C# - 如何根据来自另一个文本框的特定值激活 Windows 窗体中的文本框
- code-snippets - VS Code Snippet 中的嵌套正则表达式替换
- java - 如何进一步分类实体子类?
- powershell - 解析和格式化 API 返回
- reactjs - React 测试 Typography Text Enzyme
- c# - 在 C# 中编辑 JSON 文件
- mamp-pro - 更改 MAMP Pro 使用的 php.ini 文件?
- java - 使用两个相似的代码块在 HashMap 中查找键的运行时存在显着差异
- java - 无法连接到托管在 aws 中的 mongo db
- scala - 对象类型的scala模式匹配和接受多种类型参数的方法