Django多个外键多次引用同一个表?

时间:2016-08-17 06:39:06

标签: mysql django database database-design database-schema

我正在使用MySQL组建一个Django站点。不幸的是,我无法弄清楚如何将我的模式放在一起。

我有一个Users表,一个Tasks表和一个Session表。

每个用户一次可以有3个活动任务。每个用户可以在每个工作会话中更新(设置为完成,失败或保持打开)这三个任务。如果用户完成任务(即少于三个打开的​​任务),则下次他们创建会话时,他们将有机会创建新任务。最后一部分很容易编写代码,它是支持表格架构的逻辑,给我带来了麻烦。

我的问题是我不知道如何正确建模。起初我想在Session表中包含3个单独的列,其中外键指向Task表。但是,从我正在阅读的内容来看,我看起来并不像我可以添加3个引用同一个表的不同实例的外键。或者,我考虑在会话和任务之间创建多对多表。但是,我是否必须为每个打开的会话创建三个表条目?这似乎很快就会失控,而且对我来说也似乎很草率。

老实说,我完全不知道如何对此进行建模。我真的很感激任何帮助或意见。

谢谢

2 个答案:

答案 0 :(得分:0)

像这样的东西

class Task(models.Model):
    name = models.CharField(max_length=50)

class MyUser(models.Model):
    user = models.OneToOneField(User)
    task_1 = models.ForeignKey(Task)
    task_2 = models.ForeignKey(Task)
    task_3 = models.ForeignKey(Task)

答案 1 :(得分:0)

已更新:在Django中从另一个模型(表)多次引用同一模型(表)时,必须添加 related_name 参数。

class Task(models.Model):
    name = models.CharField(max_length=50)

class MyUser(models.Model):
    user = models.OneToOneField(User)
    task_1 = models.ForeignKey(Task, related_name='task_one')
    task_2 = models.ForeignKey(Task related_name='task_two')
    task_3 = models.ForeignKey(Task related_name='task_three')