Django 多个外键多次引用相同的 table?
Django multiple foreign keys to reference same table multiple times?
我正在使用 MySQL 构建一个 Django 站点。不幸的是,我不太清楚如何将我的模式放在一起。
我有一个用户 table、一个任务 table 和一个会话 table。
每个用户一次可以有 3 个活动任务。每个用户都可以在每个工作会话中更新(设置为完成、失败或保持打开状态)这三个任务。如果用户完成任务(即少于三个未完成的任务),下次他们创建会话时,他们将有机会创建一个新任务。最后一部分很容易编写代码,它是支撑 table 模式的逻辑给我带来了麻烦。
我的问题是我不知道如何正确建模。起初我想在 Session table 中包含 3 个单独的列,外键指向 Task table。但是,从我正在阅读的内容来看,我似乎无法添加 3 个外键,它们都引用相同 table 的不同实例。或者,我考虑过在会话和任务之间创建多对多 table。但是,我是否必须在每个打开的会话中创建三个 table 条目?这似乎很快就会失控,而且在我看来也很草率。
老实说,我完全不知道如何建模。如果有任何帮助或意见,我将不胜感激。
谢谢
像这样
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)
更新:在Django中从另一个模型(table)多次引用同一个模型(table)时,必须添加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')
我正在使用 MySQL 构建一个 Django 站点。不幸的是,我不太清楚如何将我的模式放在一起。
我有一个用户 table、一个任务 table 和一个会话 table。
每个用户一次可以有 3 个活动任务。每个用户都可以在每个工作会话中更新(设置为完成、失败或保持打开状态)这三个任务。如果用户完成任务(即少于三个未完成的任务),下次他们创建会话时,他们将有机会创建一个新任务。最后一部分很容易编写代码,它是支撑 table 模式的逻辑给我带来了麻烦。
我的问题是我不知道如何正确建模。起初我想在 Session table 中包含 3 个单独的列,外键指向 Task table。但是,从我正在阅读的内容来看,我似乎无法添加 3 个外键,它们都引用相同 table 的不同实例。或者,我考虑过在会话和任务之间创建多对多 table。但是,我是否必须在每个打开的会话中创建三个 table 条目?这似乎很快就会失控,而且在我看来也很草率。
老实说,我完全不知道如何建模。如果有任何帮助或意见,我将不胜感激。
谢谢
像这样
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)
更新:在Django中从另一个模型(table)多次引用同一个模型(table)时,必须添加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')