有了这两个课程,我总是怀疑哪个是“连接”它们的最佳实践(如果有的话)
问题
class Question(models.Model):
text = models.CharField('Question',max_length=120)
created = models.DateTimeField(auto_now_add=True)
opens = models.DateTimeField()
closes = models.DateTimeField()
答案
class Answer(models.Model):
text = models.CharField('Answer',max_length=120)
votes = models.IntegerField(default=0)
错误 - 我可以将此行添加到答案(这是复制/粘贴错误):
answers = models.ForeignKey(Answer)
修改
answers = models.ManyToManyField(Answer)
我可以将此行添加到答案:
question = models.ForeignKey(Question)
我想知道它是否真的无关紧要,或者我应该考虑不同的方面。
谢谢!
答案 0 :(得分:2)
class Question:
answer = models.ForeignKey(Answer)
“这个特殊问题只有一个可能的答案”。
class Answer:
question = models.ForeignKey(Question)
“这个答案仅属于一个特定问题,但该问题可能有多个单独的答案”
class Answer:
question = models.ManyToManyField(Question)
“这个特定的答案是多个问题的答案。所以问题可以有多个单独的答案”
class Question:
answers = modes.ManyToManyField(Answer)
“这个问题有多个不同的答案。答案也可以属于多个问题。” [最佳方法]
问题必须有答案。你没有回答(通常)回答多个问题,相反,答案回答了一个特定的问题,但可能有多个答案(例如来自不同的用户)。所以我选4。
答案 1 :(得分:1)
answers = models.ForeignKey(Answer)
question = models.ForeignKey(Question)
这些不等同。第一个(假设你的意思是第一个应该在Question
上意味着一个问题只有一个答案,但答案有一个以上的问题 - 猜测这不是你想要的。
第二个意思是答案只有一个问题而且问题将有多个答案,这可能是你想要的答案。默认情况下,这将向Question添加一个answer_set字段,其中包含所有问题答案。